在Qt
文件中说:
如果有多个插槽连接到一个信号,则插槽将是 按照他们连接的顺序依次执行, 当信号发出时。
但是在connect()
函数中,将Qt::ConnectionType
类型设置为Qt::QueuedConnection
表示"当控件返回到接收器的事件循环时调用插槽线。插槽在接收器的线程中执行。"并且Qt::DirectConnection
表示"当发出信号时,立即调用插槽。"
插槽可能无法按顺序执行。
他们有冲突吗?
答案 0 :(得分:7)
如果多个广告位有Qt::DirectConnection
,则会按照连接的顺序调用它们。如果多个广告位有Qt::QueueConnection
,则会按照它们连接的顺序调用它们。如果混合和匹配,则所有Qt::DirectionConnection
个槽将按顺序调用,然后当控制返回到事件循环时,所有Qt::QueuedConnection
个槽将按顺序调用。
答案 1 :(得分:2)
但请注意,即使已知槽调用顺序,依赖于它几乎总会导致脆弱的代码。连接是动态的。当你依赖于保持静态的连接顺序时,它们很难变得动态。如果您的代码确实依赖于连接顺序,那么您应该重构它以便以其他方式控制执行顺序,否则使代码的维护者知道需要对操作进行排序。