Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QMainWindow: некорректное восстановление состояния


Автор: babutta 21.1.2010, 14:13
Добрый день всем.

Использую Qt 4.5.1 и VS2005.

Такая проблема... Главное окно приложения - наследник QMainWindow, который содержит некое количество QDockWidget'ов...
для сохранения и восстановления состояния главного окна использую стандартные средтва - методы главного окна saveState() и restoreState().
Состояние сохраняется - в реестре появляется узел с бинарным значением.
При восстановлении состояния, док-виджеты слева и справа притесняют центральный виджет, которому приходится сжиматься до минимальных размеров по горизонтали. Когда закрываю боковые док-виджеты, закрываю приложение и запускаю снова, то свои козни начинает нижний док-виджет, который сжимает центрального до его минимальных размеров теперь уже по вертикали.
Никаких политик типа SizePolicy и т.п. не менял.

куда копать? почему док-виджеты растягиваются по полной, а не восстанавливают свое состояние?  smile 

з.ы. набрасал тестовое маленькое приложение, там все работает, хотя разницы принципиальной между тестовым и рабочим приложениями нет =(((

Автор: Antiquar 24.1.2010, 15:44
Попробуйте использовать два вызова подряд:
    pWidget->saveGeometry();
    pWidget->saveState();

ну и при чтении понятно:
    pWidget->restoreGeometry(pGeometry);
    pWidget->restoreState(pState);

Лично у меня QDockWidget-ы при восстановлении отрисовываются там, где были при закрытии

Добавлено через 1 минуту и 24 секунды
Попробуйте использовать два вызова подряд:
    pWidget->saveGeometry();
    pWidget->saveState();

ну и при чтении понятно:
    pWidget->restoreGeometry(pGeometry);
    pWidget->restoreState(pState);

Лично у меня QDockWidget-ы при восстановлении отрисовываются там, где были при закрытии

Автор: babutta 25.1.2010, 08:59
Сохранение геометрии работает, т.е. размеры и положение главного окна восстанавливаются при перезапуске приложения, но это не помогает док-виджетам - они ведут себя так же =(

Автор: babutta 26.1.2010, 14:08
В общем проблема решена... не без посторонних внимательных глаз =)
Ошибка была в том, что я пользовался конструктором и деструктором для восстановления и сохранения состояния соответственно...
так вот восстановление состояния на конструкторе было ошибкой...
как только перешел на closeEvent() и showEvent() так все и заработало =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)