gpt4 book ai didi

c++ - Qt Signal 覆盖上一个

转载 作者:太空狗 更新时间:2023-10-29 23:16:43 24 4
gpt4 key购买 nike

我有两个类,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。两条消息表示发出两次信号(具有不同的参数数据)。我在 Class1、Class2 的信号和插槽连接期间都使用了 Qt:AutoConnection。

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

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

  2. QT 信号和插槽连接是否紧跟在 Connect() 之后?还是只连接信号和槽需要时间?

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

最佳答案

这里尝试回答您的问题 2。

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

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

如果不在同一个线程上,它是通过事件循环间接调用的,所以事实上你无法保证接收者的槽何时被执行。

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

关于c++ - Qt Signal 覆盖上一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com