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

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

restoreState(state.toByteArray());

// Dock widget gets created

restoreDockWidget(dockWidget);

除了一件事之外,这很有效:如果在应用程序退出时关闭了dock小部件,它们会在下次运行应用程序时重新出现在最后一个位置,而我希望它们具有初始隐藏状态 . 有没有我错过了restoreDockWidget的用法?或者我应该手动处理dock小部件的可见状态?

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

// Dock widget gets created

restoreState(state.toByteArray());

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

编辑:似乎是在最新的Qt版本中修复 .

回答(1)

3 years ago

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

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

(注意 QDockAreaLayoutQMainWindow 使用的私有Qt类) .

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

看起来您必须手动管理Dock小部件的可见性 .