还原状态的QDockWidgets还没有被restoreDockWidget恢复?

时间:2010-01-31 10:39:26

标签: qt dock

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

restoreState(state.toByteArray());

// Dock widget gets created

restoreDockWidget(dockWidget);

除了一件事情外,这项工作非常有用:如果在应用程序退出时关闭了停靠窗口小部件,它们会在下次运行应用程序时重新出现在最后一个位置,而我希望它们具有初始隐藏状态。有没有我错过了restoreDockWidget的用法?或者我应该手动处理Dock小部件的可见状态吗?

更新:请注意,如果我这样做:

// Dock widget gets created

restoreState(state.toByteArray());

之前隐藏的小部件仍然隐藏。不幸的是,我不能依赖这个方案,因为我在主窗口恢复后有插件创建的停靠小部件。

编辑:似乎在最新的Qt版本中得到修复。

1 个答案:

答案 0 :(得分:1)

检查Qt的代码(版本4.5.0)显示以下内容:

bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget)
{
   ...
   dockWidget->show();
   // dockWidget->setVisible(!placeHolder->hidden);
   ...
}

(请注意,QDockAreaLayoutQMainWindow)使用的私有Qt类。

我不确定为什么设置停靠窗口小部件的可见性的行被注释掉并替换为每次都显示停靠窗口小部件的行。我也找不到Qt Bug Tracker中的错误;这对我来说似乎是一个错误。

看起来您必须手动管理停靠窗口小部件的可见性。