我的应用程序需要用户在几个屏幕之间切换。我这样做的方式是为每个屏幕创建不同的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