2

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

restoreState(state.toByteArray());

// Dock widget gets created

restoreDockWidget(dockWidget);

这很有效,除了一件事:如果停靠小部件在应用程序退出时关闭,它们会在下次运行应用程序时重新出现在它们的最后位置,而我希望它们具有初始隐藏状态。关于 restoreDockWidget 的使用我有什么遗漏吗?或者我应该手动处理停靠小部件的可见状态吗?

更新:请注意,如果我执行以下操作:

// Dock widget gets created

restoreState(state.toByteArray());

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

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

4

1 回答 1

2

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

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

(请注意,这QDockAreaLayout是一个由 使用的私有 Qt 类QMainWindow)。

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

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

于 2010-01-31T20:39:47.530 回答