Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QMainWindow: некорректное восстановление состояния |
Автор: babutta 21.1.2010, 14:13 |
Добрый день всем. Использую Qt 4.5.1 и VS2005. Такая проблема... Главное окно приложения - наследник QMainWindow, который содержит некое количество QDockWidget'ов... для сохранения и восстановления состояния главного окна использую стандартные средтва - методы главного окна saveState() и restoreState(). Состояние сохраняется - в реестре появляется узел с бинарным значением. При восстановлении состояния, док-виджеты слева и справа притесняют центральный виджет, которому приходится сжиматься до минимальных размеров по горизонтали. Когда закрываю боковые док-виджеты, закрываю приложение и запускаю снова, то свои козни начинает нижний док-виджет, который сжимает центрального до его минимальных размеров теперь уже по вертикали. Никаких политик типа SizePolicy и т.п. не менял. куда копать? почему док-виджеты растягиваются по полной, а не восстанавливают свое состояние? ![]() з.ы. набрасал тестовое маленькое приложение, там все работает, хотя разницы принципиальной между тестовым и рабочим приложениями нет =((( |
Автор: 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() так все и заработало =) |