2012-03-04 41 views
2

在Qt中,一个可连接一个信号到使用狭缝:QT“通配符”在连接信号

connect(x, SIGNAL(S()), y, SLOT(func())); 

其中X和Y是指向从QObject的继承的类的实例。

我要寻找类似:

connect(*, SIGNAL(S()), y, SLOT(func())); 

这将连接任何人发送信号S插槽Y的FUNC()。 或者:

connect(C, SIGNAL(S()), y, SLOT(func())); 

其中C将设计一个类(不仅是一个实例),从而使被C的任何实例发射的所有信号S1将得到连接。

我认为它应该可以使用这些替代“Y”以及“通配符”:

connect (x, SIGNAL(S()), C, SLOT(func())); 

将X连接实例的信号S C类的任何实例

如何一个在Qt中这样做?

回答

0

答案很大程度上取决于所讨论的课程是否在您的控制之下。无法完全按照您的描述进行通配符连接,但通过使用事件过滤器(对于不属于您自己的类)或通过更改类以在每次接收到任何信号时发出特定信号都可以获得相同效果(如果它是你自己的)。如果这两项工作都不起作用,那么包装现有的类可能会允许您添加所需的功能。

总之,没有一个通用的解决方案,所以让我们知道更多关于具体情况的具体细节。

+0

好的。我已经有了一个使用实例到实例连接的解决方法。尽管我错过了更通用的东西...... – user1159290 2012-03-04 21:34:38

0

有没有理由不在相关类的构造函数中这样做?任何时候你想对某个班级的所有实例做些什么,那是一个开始的好地方。让构造函数用信号(或插槽)指向对象,并以正常方式进行连接 - 使用指针代替xy

+0

构造事物的顺序是随机的,因此它使事情变得有点复杂。我可以建立一些逻辑围绕此,但更通用的东西会很好...如果它存在... – user1159290 2012-03-04 21:31:57

1

我的猜测是为什么没有神奇的通配符方法来连接从一个类的实例到一个插槽的所有信号,是因为这个类将不得不跟踪它的所有实例来迭代它们并建立连接。并且在调用之后建立连接需要类在其构造函数的末尾安装某些东西,以便将来的实例也可以获得连接。总而言之,这将是一个你继承这个类并将其添加到构造函数中的问题。如果您在构建时不知道插槽,您需要让班级跟踪这些实例,以便稍后可以调用您自己的通配符信号插槽连接方法。