Подтвердить что ты не робот

Qt: происходит ли обработка событий по порядку?

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

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

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

4b9b3361

Ответ 1

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

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

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

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