【发布时间】:2014-03-10 22:43:12
【问题描述】:
我有两个类,Class1、Class2(单例),都使用 QT 信号和插槽。每个类都包含独立类Message的实例:分别为Msg1、Msg2
Class1:来自 Msg1 的 Signal-X 连接到 Class1 slotX
Class2:来自 Msg2 的 Signal-X 连接到 Class2 slotY。
当 Class1 被实例化时,构造函数导致两条消息被发送到 Message Class,这将导致 Message Class 发出 Signal-X。两条消息意味着 Signal 发出了两次(使用不同的参数数据)。我在 Class1、Class2 的信号和插槽连接期间都使用了 Qt:AutoConnection。
通常一切都按预期正常工作。但是有时我注意到, Class1::SlotX() 没有被解雇两次,而 Class2::SlotY() 被解雇了两次!两种情况的信号源都是一样的!!!
是否有可能在 Class1 事件循环繁忙时,在使用 Class1::SlotX() 之前,第二个 Signal-X 会覆盖第一个 Signal-X?对于 Singleton 类 Class2,没有问题。 Class2::SlotY() 总是被触发两次。
QT 信号和槽连接是否紧跟在 Connect() 之后?还是只连接信号和插槽需要时间?
有人可以帮忙吗... 提前致谢
【问题讨论】:
-
您是否将 printf() 调用直接放在“发射信号”行上方,并验证您的信号实际上被发射了两次,并且这些发射实际上是在它们相应的 connect( ) 来电?
-
另外,你的对象是什么时候构造的?如果它们是静态的,并且在 main() 之前构造,那可能是个问题。
-
@JeremyFriesner 我可以确认 Singleton Class2::SlotY() 被调用了两次,这意味着信号被发射了两次!但不是 Class1::SlotX() :-(
-
也许你错误地将两个信号都连接到了 SlotY?如果您发布代码,人们可能会发现其中的错误。
-
很难说。也许一些代码? (请不要整个项目,只是简单的声明,连接发生的位置以及实例化对象的位置);)
标签: c++ qt qt4 signals-slots