Qt: События обрабатываются по порядку? - PullRequest
19 голосов
/ 14 ноября 2009

Если бы у меня был класс А, где выполняет одна из его функций:

void A::func()
{
    emit first_signal();
    emit second_signal();
}

Если предположить, что класс B имеет 2 слота, один из которых подключен к first_signal, а другой к second_signal, гарантируется ли , что слот, подключенный к first_signal, всегда будет обрабатываться до слота second_signal?

1 Ответ

15 голосов
/ 14 ноября 2009

Если вы используете прямой тип соединения между сигналами и слотами (Qt :: DirectConnection), тогда ответ - да.

Из справочной системы Qt:

Когда излучается сигнал, слоты связаны с этим обычно выполняются сразу, как обычно вызов функции. Когда это происходит, механизм сигналов и слотов полностью независимо от любого цикла событий GUI. Выполнение кода после Заявление Emit произойдет один раз Слоты вернулись. Ситуация немного отличается при использовании в очереди соединения; в таком случае код После ключевого слова Emit будет продолжить сразу и слоты будет выполнен позже.

Вы можете изменить тип соединения по умолчанию на любой из enum Qt :: ConnectionType в QObject :: connect метод.

...