我的應用程序需要用戶在幾個屏幕之間切換。我這樣做的方式是爲每個屏幕創建不同的QFrame,然後將Qframes設置爲MainWindow上的中央窗口小部件。問題是每次我調用setCentralWidget(frame)時,舊的框架都會被刪除,並且以後我無法訪問它。如何保存舊框架以便日後可以訪問?Qt QMainWindow中央插件刪除
請讓我知道如果我不清楚我的問題。
我的應用程序需要用戶在幾個屏幕之間切換。我這樣做的方式是爲每個屏幕創建不同的QFrame,然後將Qframes設置爲MainWindow上的中央窗口小部件。問題是每次我調用setCentralWidget(frame)時,舊的框架都會被刪除,並且以後我無法訪問它。如何保存舊框架以便日後可以訪問?Qt QMainWindow中央插件刪除
請讓我知道如果我不清楚我的問題。
您可以從QMainWidow
中刪除您的中央控件,重新設置它。然後,你可以設置新的中央控件;
QWidget* savedWidget = mainWnd->centralWidget();
savedWidget->setParent(0);//now it is saved
mainWnd->setCentralWidget(newWidget);
而且使用QStackedWidget
可能會是更好的解決方案。
您可以在相應的子小部件上使用.hide()/。show()來完成此操作。但是更好的解決方案几乎可以肯定地使用QTabWidget或QStackedWidget。
QStackedWidget是這個問題的優雅解決方案,您可以瞭解如何正確使用它here。
此解決方案不起作用,看着QMainWindow它不應該工作。你使用的是哪個版本的Qt? – Kamath 2016-06-11 17:29:32
@Kamath,回到'13我可能正在使用Qt 4.8。我一直沒有開發過使用Qt的一段時間,不能說,如果它應該或不適用於當前版本,但我沒有看到任何理由對象模型來改變這種顯着的打破這種行爲 – Lol4t0 2016-06-11 17:35:16
這不是確切brach我qmainwindow的來源是相同的,我有https://github.com/openwebos/qt/blob/master/src/gui/widgets/qmainwindow.cpp,我看到setCurrentWidget如果更新調用deleteLater。 – Kamath 2016-06-11 18:03:40