gpt4 book ai didi

linux - 如何在 QT 应用程序中创建 SignalHub?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:00 26 4
gpt4 key购买 nike

QT5上有一个多线程的应用。线程相互发出信号。例如,GUI 中的按钮点击信号来自三个独立的线程,每个线程执行自己的功能。有没有一种简单的方法可以将所有信号连接到某个对象,我们称之为 SignalHub?而这个SignalHub会接收所有线程或对象的所有信号,任何线程或对象都可以订阅到想要的信号?类似于 DBus,但仅适用于单个 QT 应用程序中的多个线程?每个线程或对象不应接收自己的信号。这样做的目的是减少代码量(应用程序中有几个线程,每个线程都有多个信号和槽)。并且仅在新对象的构造函数或新线程的构造函数中将必要的信号连接到(和从)SignalHub 将是理想的。

最佳答案

信号是线程安全的。 connect() 和 disconnect() 也是如此。意思是:你可以从字面上声明任何你想成为你的“信号中心”的对象,并根据需要跨线程连接插槽。所涉及的对象属于哪个线程并不重要。没问题。

为了避免接收到对象发送给自己的信号,您可以简单地按照这些方式做一些事情:

void MyObject::someSlot() {
if(sender() == this) return;
}

关于linux - 如何在 QT 应用程序中创建 SignalHub?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51782809/

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