У меня есть QObject, который имеет несколько слотов, подключенных к одному из его сигналов. Есть ли порядок, в котором каждый из этих слотов вызывается при испускании сигнала?
Порядок слотов, называемых QObject
Ответ 1
В Qt v4.5 и ранее: Нет, порядок undefined, как можно видеть в документации здесь:
Если несколько слотов подключены к одному сигналу, слоты будут выполняться один за другим в произвольном порядке при испускании сигнала.
Изменить: Начиная с версии 4.6, это уже не так. Теперь слоты будут работать в том порядке, в котором они подключены. Соответствующий абзац текущая документация:
Если несколько слотов подключены к одному сигналу, слоты будут выполняться один за другим, в том порядке, в котором они были подключены, когда излучается сигнал
Ответ 2
Согласно документации Qt:
Если несколько слотов подключены к одному сигнала, слоты будут выполнены одним после другого, в порядке, в котором они были связаны, когда сигнал излучается.
Ответ 3
Пока порядок undefined, до сих пор, во всех версиях Qt это был connect()
порядок, за исключением случаев, когда используется Qt::QueuedConnection
, и в этом случае, конечно, он даже не гарантировал, что все или все слоты были выполнены, когда emit
возвращается. Однако полагаться на порядок все еще не рекомендуется.
Ответ 4
Опираясь на то, в каком порядке будут выполняться слоты, это плохая и плохая идея, так как она поражает как дух соединений сигналов/слотов, так и оставляет вас широко открытыми для нежелательного поведения, если вы выполняете какие-либо программные соединения сигналов и слоты.