在QObject上调用的槽的顺序

时间:2009-08-07 20:51:56

标签: qt

我有一个QObject,它有一个连接到其中一个信号的插槽。在发出信号时,是否存在调用每个槽的顺序?

4 个答案:

答案 0 :(得分:48)

在Qt v4.5及更早版本中:不,订单未定义,如the documentation here所示:

  

如果有几个插槽连接到一个信号,则当发出信号时,插槽将以任意顺序依次执行。

编辑:从版本4.6开始,这不再是真的。现在插槽将按照它们连接的顺序运行。 the current documentation的相关段落:

  

如果有几个插槽连接到一个信号,那么插槽将按照它们连接的顺序依次执行,当信号发出时

答案 1 :(得分:10)

根据Qt文件:

  

如果有多个插槽连接到一个插槽   信号,插槽将被执行一个   在另一个之后,他们按顺序   已经连接,当信号   被发射出来。

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

答案 2 :(得分:2)

虽然订单未定义,但到目前为止,在所有Qt版本中它都是connect()订单,除非使用Qt::QueuedConnection,在这种情况下,当然,它甚至不保证任何或emit返回时已执行所有插槽。但是,仍然不鼓励依赖订单。

答案 3 :(得分:0)

依赖于插槽的执行顺序是一个糟糕的坏主意,因为它会破坏信号/插槽连接的精神,如果您对信号和放大器进行任何编程连接,则会让您对此产生不良行为;槽。