如何在Qt中向QThread类的特定对象发出信号

How to emit signal to a specific object of a QThread class in Qt?

本文关键字:对象 信号 Qt 中向 QThread      更新时间:2023-10-16

假设我们已经从一个QThread类创建了几个实例。我需要通过考虑到所有线程对象都是从同一个 Qthread 类实例化来将消息从一个线程对象发送到另一个线程对象。通过发出信号,所有线程对象都将接收发出的信号。但我只希望一个特定的对象(例如具有特定线程 id 的对象(接收信号。如何在Qt中做到这一点?

谢谢。

信号和插槽在您的类中定义,但您将特定对象的信号连接到特定对象的插槽。当您在一个线程中发出信号时,只有连接了插槽的对象才会接收该信号。

如果我理解正确,您可能需要一个QSignalMapper:

此类收集一组无参数信号,并使用与发送信号的对象对应的整数、字符串或小部件参数重新发出它们。

查看示例以获取更多信息,如果您不喜欢使用信号映射器,您可以随时在插槽中使用自定义过滤器。因此,所有其他插槽(对信号不感兴趣(都可以忽略它。无法用emit过滤信号,仅将其直接发送到指定的连接插槽。

信号的发送者无法确定谁接收信号,并且连接到此类信号的每个实例都会接收该信号。这是信号/时隙机制实现的观察者模式所固有的。

我会做一个中介,派生的线程(比如 A(1,..,N((在其中注册自己。在调解器中,您需要实现来自 A(i( 的消息必须转到 A(j( 的逻辑。优点是 A 实例不需要相互了解。 交互可以通过发布根据qt线程安全的事件来完成。