更改信号槽连接顺序

cma*_*t85 7 qt signals-slots

我最近遇到了一个问题,我的代码是由某些行为依赖于特定对象中的信号槽连接顺序引起的.这是我的一个设计缺陷(连接总是意味着动态,所以这个缺陷是不可避免的),但它让我思考.

是否可以重新排序对象中的信号槽连接?和/或在创建连接时指定连接的"索引"?

我很欣赏你可以通过破坏所有连接并以新的顺序重新创建它们来模拟这种效果,但这不是我要问的.我在API或一般文档中找不到任何内容,所以我怀疑答案是否定的,但我认为无论如何我都应该问...

Hos*_*ork 10

过去的理解相反,我很惊讶地看到一个更新(至少在最近的版本中)Qt没有将槽调用的顺序保留为未定义:

如果多个插槽连接到一个信号,则在发出信号时,插槽将按照它们已连接的顺序依次执行.

http://doc.qt.io/qt-4.8/signalsandslots.html#signals

(尽管有人可能会争辩说,该文件中的一句话不足以代表过去和未来所有Qt 4.X版本的"强有力"保证.)

似乎没有用于重新排序信号和插槽的API.即使有,我觉得依靠顺序不是一个很好的主意.我建议重新考虑设计.

你可能会调查的一件事就是让你的插槽排队他们的行动,而不是直接采取行动.然后,当调用所有插槽时,您将处理该队列...考虑一些优先级属性.