2010-01-31 207 views
1

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

restoreState(state.toByteArray()); 

// Dock widget gets created 

restoreDockWidget(dockWidget); 

这对一件事的伟大工程除外:如果应用程序退出时,他们重新出现到他们的最后一个位置运行应用程序的下一次船坞组件被关闭,而我希望他们有一个最初的隐藏状态。有没有我错过了有关restoreDockWidget的用法?或者我应该手动处理码头小部件的可见状态?

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

// Dock widget gets created 

restoreState(state.toByteArray()); 

然后以前隐藏的部件仍然隐藏。不幸的是,我不能依靠这个方案,因为我已经在主窗口恢复后使用插件创建了小部件。

编辑:似乎是固定在最新的Qt版本。

回答

1

检查Qt的代码(4.5.0版本)的说明如下:

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

(注意:QDockAreaLayout是使用QMainWindow私人的Qt类)。

我不知道为什么设置码头小部件可见性的行被注释掉了,并用线条代替,每次都显示码头小部件。我也找不到Qt Bug Tracker中的一个bug。这对我来说似乎是一个错误。

它看起来像你必须手动管理码头小部件的可见性。

+0

感谢您的回答 - 我会检查一下当前的Qt Git是否仍然如此。如果是这样,我认为值得将问题提交给bug跟踪器,因为单独使用restoreState()会产生预期的行为。 – Gnurou 2010-02-01 02:05:42