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

问题描述:

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

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

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

这里是一些代码行,使问题更加清晰:

主窗口:

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

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

文件:

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

非常感谢您!

再见, 本杰明

如果您使用的是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 
} 
+0

我看到介绍。这是做这件事的标准方式吗? – user2492801

+0

我不知道它是否是标准方式,我从来没有使用过mdi。我只知道这是一种可能性。 – MEeken

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