gpt4 book ai didi

qt - 如何在 Qt 中模拟消息总线?

转载 作者:行者123 更新时间:2023-12-04 20:57:23 25 4
gpt4 key购买 nike

我需要实现一个简单的消息总线:

  • 只有一个过程,因此不需要做 D-Bus。
  • 发布/订阅类型化事件(甚至可以是 QObjects)

  • 我正在考虑使用 QSignalMapper 来标记“命名事件”,然后从插槽重新发射或将发布者信号连接到订阅者的信号......

    有什么建议想法吗?还是我应该选择相对简单的设计模式?

    PS:Windows 上 D-Bus 的 AFAICS 需要安装“第 3 方”软件才能与 Qt 一起使用。

    最佳答案

    为什么不只使用一个专用的 QObject 子类作为消息总线?在那里,您定义了可能通过消息总线交换的所有信号,并提供相应的通知方法来发出这些信号。现在每个想要接收“消息”的组件都可以连接到感兴趣的信号。

    如果您想要更通用的方法,请使用与以前相同的方法。然而,(单例)QObject 子类现在只有一个“message(QByteArray)”信号和一个发出该信号的“sendMessage(QByteArray)”公共(public)方法。您可能还想将发送消息方法声明为插槽,以防万一您想将另一个信号连接到发送方法。

    我自己使用这些方法,它们工作得很好。甚至不同的线程也可以使用这种机制相互通信而不会出现任何问题。如果你使用 QByteArray 方法,你会得到类似于 DBus 的东西。您对消息进行序列化和反序列化,并自动确保所有消息接收者都获得他们自己的消息副本,以及进行并行计算所获得的所有好处。

    关于qt - 如何在 Qt 中模拟消息总线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060233/

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