寻找QT转发信号的原始发送者

时间:2015-03-05 00:59:45

标签: qt signals-slots sender

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

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

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

我的问题: 让我们说A类想要在更新foo时在Conn对象中发出名为 sig_updateFoo(int)的信号。 现在,让我们说A类也希望将 sig_updateFoo(int)信号连接到名为 slot_FooUpdated(int)的插槽,因为它也想要监听别人发出Conn对象的信号。

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

我需要知道原始发射器是否是A类(在这种情况下我将忽略该调用),或者如果它是一个不同的类,这是可以的。)

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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