Qt restoreDockWidget未还原的QDockWidget的关闭状态?
我试图在退出并重新启动应用程序时获取保存/恢复的QDockWidgets的位置和状态。我的主窗口中的流程如下所示:Qt restoreDockWidget未还原的QDockWidget的关闭状态?,qt,dock,Qt,Dock,我试图在退出并重新启动应用程序时获取保存/恢复的QDockWidgets的位置和状态。我的主窗口中的流程如下所示: restoreState(state.toByteArray()); // Dock widget gets created restoreDockWidget(dockWidget); // Dock widget gets created restoreState(state.toByteArray()); 这非常有效,但有一点除外:如果dock Widget在应用程
restoreState(state.toByteArray());
// Dock widget gets created
restoreDockWidget(dockWidget);
// Dock widget gets created
restoreState(state.toByteArray());
这非常有效,但有一点除外:如果dock Widget在应用程序退出时关闭,那么在下次运行应用程序时,它们会重新出现在最后一个位置,而我希望它们具有初始隐藏状态。关于restoreDockWidget的使用,我有没有遗漏什么?或者我应该手动处理dock小部件的可见状态吗
更新:请注意,如果我执行以下操作:
restoreState(state.toByteArray());
// Dock widget gets created
restoreDockWidget(dockWidget);
// Dock widget gets created
restoreState(state.toByteArray());
然后以前隐藏的小部件保持隐藏状态。不幸的是,我不能依赖这个方案,因为我有插件在主窗口恢复后创建的dock小部件
编辑:在最新的Qt版本中似乎是固定的。检查Qt的代码(版本4.5.0)显示以下内容:
bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget)
{
...
dockWidget->show();
// dockWidget->setVisible(!placeHolder->hidden);
...
}
(请注意,QDockAreaLayout
是一个私有的Qt类,由QMainWindow
使用)
我不确定为什么设置dock小部件可见性的行被注释掉,并替换为每次显示dock小部件的行。我在Qt bug跟踪器中也找不到这个bug;对我来说,这好像是一只虫子
看起来您必须手动管理dock小部件的可见性。谢谢您的回答-我将检查当前Qt Git是否仍然如此。如果是,我认为值得将问题提交给bug追踪器,因为单独使用restoreState()会产生预期的行为。