在Qt中,许多插槽连接到同一个信号,它们在发出信号时是否按顺序调用?

时间:2015-07-31 17:10:10

标签: qt signals-slots

Qt文件中说:

  

如果有多个插槽连接到一个信号,则插槽将是   按照他们连接的顺序依次执行,   当信号发出时。

但是在connect()函数中,将Qt::ConnectionType类型设置为Qt::QueuedConnection表示"当控件返回到接收器的事件循环时调用插槽线。插槽在接收器的线程中执行。"并且Qt::DirectConnection表示"当发出信号时,立即调用插槽。" 插槽可能无法按顺序执行。

他们有冲突吗?

2 个答案:

答案 0 :(得分:7)

如果多个广告位有Qt::DirectConnection,则会按照连接的顺序调用它们。如果多个广告位有Qt::QueueConnection,则会按照它们连接的顺序调用它们。如果混合和匹配,则所有Qt::DirectionConnection个槽将按顺序调用,然后当控制返回到事件循环时,所有Qt::QueuedConnection个槽将按顺序调用。

答案 1 :(得分:2)

但请注意,即使已知槽调用顺序,依赖于它几乎总会导致脆弱的代码。连接是动态的。当你依赖于保持静态的连接顺序时,它们很难变得动态。如果您的代码确实依赖于连接顺序,那么您应该重构它以便以其他方式控制执行顺序,否则使代码的维护者知道需要对操作进行排序。