2013-03-06 10 views
1

我正在研究一個有3個插件的應用程序。主要的應用程序是一個Qt項目,同時我們還添加了3個Qt項目,它們是主應用程序的插件。如何避免由於Qt中的「相同信號,不同插槽」而導致的衝突?

我在一個項目中調用connect語句,其中信號是triggered(),對象如下圖所示,有一個插槽slt_menuSetIngestDir()。我在另一個具有相同對象的項目中調用connect語句,信號相同,但是具有不同的插槽slt_IngestDir()。

這裏是樣品連接語句項目1:

connect(PluginLocalManager::getInstance()->getEventIF()->getMenuAction(M_TOOL_SETINGESTDIR), SIGNAL(triggered()), this, SLOT(slt_menuSetIngestDir())); 

樣品連接語句項目2:

connect(PluginLocalManager::getInstance()->getEventIF()->getMenuAction(M_TOOL_SETINGESTDIR), SIGNAL(triggered()), this, SLOT(slt_IngestDir())); 

問題是,當我運行的應用程序,當點擊特定選項時,它會使用相同的對象觸發SIGNAL,並同時調用兩個不同的插槽。

是否有可能斷開項目2中的信號並確保項目1中的連接語句專用於項目1,反之亦然?我在Qt中遇到過disconnect聲明,但它看起來像我失去了一些東西。請幫忙!!

+0

項目1和項目2創建不同的二進制文件,對吧? – 2013-03-06 09:24:26

+0

@仇恨引擎:在主項目中沒有創建.exe文件。就像我提到的那樣,這些連接語句分別存在於插件1和插件2項目中。 – Gojira 2013-03-06 09:27:18

+0

對象實例如何在兩個插件中出現.. – zzk 2013-03-06 09:34:17

回答

2

要斷開選擇信號的所有插槽,嘗試使用 connect(PluginLocalManager::getInstance()->getEventIF()->getMenuAction(M_TOOL_SETINGESTDIR), SIGNAL(triggered()), 0, 0)

但它看起來像不好的設計,我想你應該在管理你的主要應用程序的連接。