2012-03-04 40 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

我的猜測是爲什麼沒有神奇的通配符方法來連接從一個類的實例到一個插槽的所有信號,是因爲這個類將不得不跟蹤它的所有實例來迭代它們並建立連接。並且在調用之後建立連接需要類在其構造函數的末尾安裝某些東西,以便將來的實例也可以獲得連接。總而言之,這將是一個你繼承這個類並將其添加到構造函數中的問題。如果您在構建時不知道插槽,您需要讓班級跟蹤這些實例,以便稍後可以調用您自己的通配符信號插槽連接方法。