Qt信号过去写过

时间:2014-03-10 22:43:13

标签: c++ qt qt4 signals-slots

我有两个类,Class1,Class2(Singleton),都使用QT信号和&插槽。每个类包含单独的类Message的实例:Msg1,Msg2

Class1:来自Msg1的Signal-X连接到Class1 slotX

Class2:来自Msg2的Signal-X连接到Class2 slotY。

当实例化Class1时,构造函数会导致两个消息被发送到Message Class,然后将导致Message Class发出Signal-X。两条消息表示信号发射两次(具有不同的参数数据)。我在Class1,Class2中的信号和插槽连接期间使用了Qt:AutoConnection。

通常一切都按预期正常工作。但有些时候我注意到,Class1 :: SlotX()没有被激发两次,而Class2 :: SlotY()被激发两次!!两种情况下信号源相同!!!

  1. 当Class1事件循环忙时,第二个Signal-X是否可能在使用Class1 :: SlotX()之前覆盖第一个Signal-X?对于Singleton类Class2,没有问题。 Class2 :: SlotY()总是被触发两次。

  2. 是QT信号& Connect()后立即连接插槽?或者只需要时间才能连接信号和插槽?

  3. 有人可以帮忙...... 提前致谢

1 个答案:

答案 0 :(得分:0)

以下是尝试回答您的问题2。

根据您的Class1 Class2和Message类是否在同一个线程中,Qt :: AutoConnection将导致不同的行为。

如果两者都在同一个线程上,则会导致直接连接,因此直接调用插槽作为回调,而不调用事件循环。

如果不在同一个线程上,则通过事件循环间接调用它,因此事实上你不能保证接收器的槽被执行。

对于q1,如Jeremy Friesner所述,需要代码示例