2012-02-13 136 views
6

我的應用程序需要用戶在幾個屏幕之間切換。我這樣做的方式是爲每個屏幕創建不同的QFrame,然後將Qframes設置爲MainWindow上的中央窗口小部件。問題是每次我調用setCentralWidget(frame)時,舊的框架都會被刪除,並且以後我無法訪問它。如何保存舊框架以便日後可以訪問?Qt QMainWindow中央插件刪除

請讓我知道如果我不清楚我的問題。

回答

9

您可以從QMainWidow中刪除您的中央控件,重新設置它。然後,你可以設置新的中央控件;

QWidget* savedWidget = mainWnd->centralWidget(); 
savedWidget->setParent(0);//now it is saved 
mainWnd->setCentralWidget(newWidget); 

而且使用QStackedWidget可能會是更好的解決方案。

+0

此解決方案不起作用,看着QMainWindow它不應該工作。你使用的是哪個版本的Qt? – Kamath 2016-06-11 17:29:32

+0

@Kamath,回到'13我可能正在使用Qt 4.8。我一直沒有開發過使用Qt的一段時間,不能說,如果它應該或不適用於當前版本,但我沒有看到任何理由對象模型來改變這種顯着的打破這種行爲 – Lol4t0 2016-06-11 17:35:16

+0

這不是確切brach我qmainwindow的來源是相同的,我有https://github.com/openwebos/qt/blob/master/src/gui/widgets/qmainwindow.cpp,我看到setCurrentWidget如果更新調用deleteLater。 – Kamath 2016-06-11 18:03:40

0

您可以在相應的子小部件上使用.hide()/。show()來完成此操作。但是更好的解決方案几乎可以肯定地使用QTabWidgetQStackedWidget

4

QStackedWidget是這個問題的優雅解決方案,您可以瞭解如何正確使用它here