我的设置: 我有一个类只发出称为类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类。
有什么想法吗?
答案 0 :(得分:2)
通常,您必须在每次信号发射时传递某种形式的标识符。 Qt在这方面为您提供的唯一功能是sender()
,但正如您所知,它只返回最后一个发送者(不出所料)。
但是,在这种情况下,将slot_FooUpdated(int)
收到的值与发送给Conn
对象的最后一个值进行比较并不简单,只有在值不同时才对其进行操作?