2010-01-31 48 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