如何将信号连接到更换插槽

时间:2013-08-23 13:15:03

标签: qt mdi signals-slots

我有一个使用Qt和多文档界面的示例应用程序。在主窗口中,只要用户激活此操作,就会在菜单栏中添加操作,例如保存当前文档的操作。有一个文档类必须被告知保存文档。不幸的是,当前文档可能会改变(它是一个MULTIPLE文档接口),因此使用信号槽机制并不容易。我不知道我应该将信号连接到哪个文档实例。

此处的示例应用程序将信号连接到主窗口中的虚拟插槽,此插槽通过查询当前文档并调用该实例的相应方法,将请求重定向到文档类中的相应方法。这导致很多样板代码。

有没有更优雅的方法来解决这个问题?

这里有一些代码可以使问题更加清晰:

主窗口:

connect( action, SIGNAL( activated() ), this, SLOT( onSaveFile() ));

void MainWindow::onSaveFile()
{
getCurrentDocument()->save();
}

文件:

void Document::save()
{
...
}

非常感谢!

再见 本杰明

2 个答案:

答案 0 :(得分:0)

如果您使用QMdiArea,则可以收听subWindowsActivated信号并重新连接信号和插槽。

connect(QMdiArea, SIGNAL(subWindowsActivated(QMdiSubWindow*), this, SLOT(subWindowChanged(QMdiSubWindow*))

void MainWindow::subWindowChanged(QMdiSubWindow* newSubWindow) {
  // Update the signals to point to the new subwindow
}

答案 1 :(得分:0)

我想你的方法“getCurrentDocument()”是优雅的enougha并在http://www.informit.com/store/c-plus-plus-gui-programming-with-qt4-9780132354165

中呈现