Порядок слотов, называемых QObject

У меня есть QObject, который имеет несколько слотов, подключенных к одному из его сигналов. Есть ли порядок, в котором каждый из этих слотов вызывается при испускании сигнала?

Ответ 1

В Qt v4.5 и ранее: Нет, порядок undefined, как можно видеть в документации здесь:

Если несколько слотов подключены к одному сигналу, слоты будут выполняться один за другим в произвольном порядке при испускании сигнала.

Изменить: Начиная с версии 4.6, это уже не так. Теперь слоты будут работать в том порядке, в котором они подключены. Соответствующий абзац текущая документация:

Если несколько слотов подключены к одному сигналу, слоты будут выполняться один за другим, в том порядке, в котором они были подключены, когда излучается сигнал

Ответ 2

Согласно документации Qt:

Если несколько слотов подключены к одному сигнала, слоты будут выполнены одним после другого, в порядке, в котором они были связаны, когда сигнал излучается.

http://qt-project.org/doc/qt-4.8/signalsandslots.html

Ответ 3

Пока порядок undefined, до сих пор, во всех версиях Qt это был connect() порядок, за исключением случаев, когда используется Qt::QueuedConnection, и в этом случае, конечно, он даже не гарантировал, что все или все слоты были выполнены, когда emit возвращается. Однако полагаться на порядок все еще не рекомендуется.

Ответ 4

Опираясь на то, в каком порядке будут выполняться слоты, это плохая и плохая идея, так как она поражает как дух соединений сигналов/слотов, так и оставляет вас широко открытыми для нежелательного поведения, если вы выполняете какие-либо программные соединения сигналов и слоты.