2012-02-13 134 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