【问题标题】:Finding original sender of QT forwarded signal查找 QT 转发信号的原始发送者
【发布时间】:2015-05-06 06:01:15
【问题描述】:

我的设置: 我有一个只发出信号的类,称为 Conn 类。

我所有的 QObject 类(A、B 和 C)都是孤立存在的,我根本不希望它们相互了解。但是,如果 A 类想要在自身之外发送一些信息,它必须向 Conn 对象发送一个信号。

B 类和 C 类都可以访问 Conn 对象,并且可以自行决定是否要收听 Conn 的信号之一。

我的问题: 假设 A 类希望在更新 foo 时在名为 sig_updateFoo(int) 的 Conn 对象中发出信号。 现在,假设 A 类还想将 sig_updateFoo(int) 信号连接到其名为 slot_FooUpdated(int) 的槽,因为它还想监听其他人何时发出Conn 对象的信号。

当 A 类的 Conn 对象发出一个也连接到其插槽之一的信号时,会发生逻辑错误。

我需要知道原始发射器是否是 A 类(在这种情况下我将忽略调用),或者它是否是不同的类,这没关系。

我尝试过的想法: 如果我在 A 类的槽中使用 QObject::sender(),我只会得到 Conn 对象的引用,而不是 A 类。

有什么想法吗?

【问题讨论】:

    标签: qt signals-slots sender


    【解决方案1】:

    通常,您必须在每次发射信号时传递某种形式的标识符。 Qt 在这方面为您提供的唯一功能是 sender(),但正如您所发现的,它只返回最后一个发件人(不足为奇)。

    但是,在这种情况下,将slot_FooUpdated(int) 收到的值与发送到Conn 对象的最后一个值进行比较,并仅在值不同时对其进行操作不是更简单吗?

    【讨论】:

    • 该死,这就是我的怀疑。 A 类和 B 类可能同时发送相同的值。它们完全相互独立。如果我只比较值,我可能会从 B 类中丢弃一个值。由于它们是相同的值,我想这并不重要,但我希望有一个更优雅的解决方案。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多