Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt restoreDockWidget未还原的QDockWidget的关闭状态?_Qt_Dock - Fatal编程技术网

Qt restoreDockWidget未还原的QDockWidget的关闭状态?

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在应用程

我试图在退出并重新启动应用程序时获取保存/恢复的QDockWidgets的位置和状态。我的主窗口中的流程如下所示:

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()会产生预期的行为。