2013-08-23 56 views
1

我有一個使用Qt和多文檔界面的示例應用程序。在主窗口中,只要用戶激活此操作,就會在菜單欄中添加一些操作,例如保存當前文檔的操作。有一個文檔類必須被告知保存文檔。不幸的是,當前的文檔可能會改變(它是一個多文檔界面),因此使用信號插槽機制並不容易。我不知道應該將信號連接到哪個文檔實例。如何將信號連接到更換插槽

這裏的示例應用程序將信號連接到主窗口中的虛擬插槽,並且該插槽通過查詢當前文檔並調用該實例的相應方法,將請求重定向到文檔類中的相應方法。這導致了很多樣板代碼。

有沒有更好的方法來解決這個問題?

這裏是一些代碼行,使問題更加清晰:

主窗口:

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

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

文件:

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

非常感謝您!

再見, 本傑明

回答

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 
} 
+0

我看到介紹。這是做這件事的標準方式嗎? – user2492801

+0

我不知道它是否是標準方式,我從來沒有使用過mdi。我只知道這是一種可能性。 – MEeken