2010-01-31 2 views
1

Я пытаюсь получить позиции и состояние QDockWidgets, сохраненных/восстановленных, когда приложение завершено и перезаписано. Поток в моем главном окне выглядит следующим образом:Закрытое состояние QDockWidgets не восстановлено restoreDockWidget?

restoreState(state.toByteArray()); 

// Dock widget gets created 

restoreDockWidget(dockWidget); 

Это прекрасно работает освобожденное одно: если прикрепляемые виджеты закрыты при выходе из приложения, они появляются в их последнюю позицию в следующий раз, когда приложение запускается, в то время как Я ожидаю, что у них будет начальное скрытое состояние. Есть ли что-то, что я пропустил об использовании restoreDockWidget? Или я должен обрабатывать видимое состояние виджета док-станции вручную?

Update: Обратите внимание, что если я делаю следующим образом:

// 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 частный класс Qt, который используется QMainWindow).

Я не знаю, почему строка, чтобы установить видимость виджета, была закомментирована и заменена линией, отображающей виджет док-станции каждый раз. Я также не мог найти ошибку в Qt Bug Tracker для этого; это кажется ошибкой для меня.

Похоже, вам придется вручную управлять видимостью виджета док-станции.

+0

Спасибо за ответ - я проверю, все ли это в случае с текущим Qt Git. Если это так, я думаю, что стоит отправить вопрос в трекер ошибок, так как использование restoreState() приводит к ожидаемому поведению. – Gnurou

Смежные вопросы