Порядок слотов, вызываемых на QObject - PullRequest
31 голосов
/ 08 августа 2009

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

Ответы [ 4 ]

48 голосов
/ 08 августа 2009

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

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

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

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

10 голосов
/ 13 декабря 2010

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

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

http://qt -project.org / док / кварта-4,8 / signalsandslots.html

2 голосов
/ 08 августа 2009

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

0 голосов
/ 26 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...