如何避免Qt中“相同信号,不同插槽”引起的冲突?

时间:2013-03-06 09:01:19

标签: c++ qt qt4 signals

我正在开发一个有3个插件的应用程序。主要应用程序是一个Qt项目,我们还添加了3个Qt项目,这些项目是主应用程序的插件。

我在一个项目中调用连接语句,其中SIGNAL为 triggered() ,对象如下所示,并且有一个插槽 slt_menuSetIngestDir()。我在另一个项目中调用connect语句,该项目具有相同的对象,相同的SIGNAL triggered() 但是具有不同的插槽 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,并在同一时间调用两个不同的插槽。

我是否可以断开Project 2中的信号并确保Project 1中的connect语句专门用于Project 1,反之亦然???我在Qt中遇到disconnect声明,但看起来我错过了一些东西。请帮忙!!

1 个答案:

答案 0 :(得分:2)

要断开所有插槽与所选信号的连接,请尝试使用 connect(PluginLocalManager::getInstance()->getEventIF()->getMenuAction(M_TOOL_SETINGESTDIR), SIGNAL(triggered()), 0, 0)

但它看起来很糟糕,我认为你应该在主应用程序中管理连接。