【问题标题】:Closed state of QDockWidgets not restored by restoreDockWidget?restoreDockWidget没有恢复QDockWidgets的关闭状态?
【发布时间】:2010-01-31 10:39:26
【问题描述】:

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

restoreState(state.toByteArray());

// Dock widget gets created

restoreDockWidget(dockWidget);

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

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

// Dock widget gets created

restoreState(state.toByteArray());

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

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

【问题讨论】:

    标签: qt dock


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的回答 - 我将检查当前 Qt Git 是否仍然如此。如果是这样,我认为值得将问题提交给错误跟踪器,因为单独使用 restoreState() 会产生预期的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2014-04-25
    • 2011-07-25
    • 2020-04-20
    相关资源
    最近更新 更多