我有一个QObject,它有一个连接到其中一个信号的插槽。在发出信号时,是否存在调用每个槽的顺序?
答案 0 :(得分:48)
在Qt v4.5及更早版本中:不,订单未定义,如the documentation here所示:
如果有几个插槽连接到一个信号,则当发出信号时,插槽将以任意顺序依次执行。
编辑:从版本4.6开始,这不再是真的。现在插槽将按照它们连接的顺序运行。 the current documentation的相关段落:
如果有几个插槽连接到一个信号,那么插槽将按照它们连接的顺序依次执行,当信号发出时
答案 1 :(得分:10)
根据Qt文件:
如果有多个插槽连接到一个插槽 信号,插槽将被执行一个 在另一个之后,他们按顺序 已经连接,当信号 被发射出来。
答案 2 :(得分:2)
虽然订单未定义,但到目前为止,在所有Qt版本中它都是connect()
订单,除非使用Qt::QueuedConnection
,在这种情况下,当然,它甚至不保证任何或emit
返回时已执行所有插槽。但是,仍然不鼓励依赖订单。
答案 3 :(得分:0)
依赖于插槽的执行顺序是一个糟糕的坏主意,因为它会破坏信号/插槽连接的精神,如果您对信号和放大器进行任何编程连接,则会让您对此产生不良行为;槽。