Qt QMainWindow中央控件的删除

7
我的应用程序需要用户在多个屏幕之间切换。我是通过为每个屏幕创建不同的QFrame,然后将这些QFrame设置为MainWindow的中央窗口小部件来实现的。问题是,每次我调用setCentralWidget(frame)时,旧的frame都会被删除,我无法稍后访问它。如何保存旧的frame以便稍后访问?
如果我的问题不清楚,请告诉我。
3个回答

10

您可以通过重新设置父对象,将中心窗口部件从QMainWindow中删除。然后,您可以设置新的中心窗口部件;

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

同时使用QStackedWidget可能会是更好的解决方案。


这个解决方案不能工作,从 QMainWindow 上看它不应该工作。你使用的是哪个版本的 Qt? - Kamath
@Kamath,回到2013年,我可能正在使用Qt 4.8。我已经有一段时间没有使用Qt进行开发了,无法确定它是否应该与当前版本一起工作,但我没有看到任何理由可以显著改变对象模型以破坏此行为。 - Lol4t0
这不是我用于 QMainWindow 的确切分支,我的源代码与 https://github.com/openwebos/qt/blob/master/src/gui/widgets/qmainwindow.cpp 相同。我看到 setCurrentWidget 调用 deleteLater 如果已更新。 - Kamath
@Kamath,当您重新设置其父项时,它可能会从布局中删除。这就是为什么需要 savedWidget->setParent(0); 步骤的原因。 - Lol4t0

4

QStackedWidget 是一个优雅的解决方案,可以解决这个问题。你可以在 这里 找到正确使用它的方法。


0

你可以在适当的子部件上使用.hide()和.show()来实现这一点。但是针对你的情况,更好的解决方案几乎肯定是使用QTabWidgetQStackedWidget


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接