Russian Qt Forum
Октябрь 01, 2024, 16:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMainWindow не восстанавливает размеры centralWidget'a  (Прочитано 3414 раз)
babutta
Гость
« : Январь 21, 2010, 11:37 »

Добрый день.

Есть два приложения (Qt 4.5.1, VS 2005).
Оба приложения построены одинаково: главное окно с QDockWidget'ами, QToolBar'ами...

пользуюсь методами главного окна saveState() и restoreState().

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

SizePolicy у доквиджетов не настраивал, ничего такого не крутил ни в одном приложении.

что может быть? как добиться нормального восстановления состояния главного окна?
Записан
fsMark
Гость
« Ответ #1 : Январь 21, 2010, 13:24 »

Чтобы нормально работали saveState() и restoreState().. надо чтобы для всех обьектов которые сохраняются и восстанавливаются, были заданны имена (в дизанере например Улыбающийся)
Записан
babutta
Гость
« Ответ #2 : Январь 21, 2010, 13:58 »

имена объектов заданы конечно (через setObjectName()) для всех уникальные, иначе бы этот механизм вообще не работал.
а он работает, только не так как должен =(
Записан
babutta
Гость
« Ответ #3 : Январь 26, 2010, 14:08 »

В общем проблема решена... не без посторонних внимательных глаз =)
Ошибка была в том, что я пользовался конструктором и деструктором для восстановления и сохранения состояния соответственно...
так вот восстановление состояния на конструкторе было ошибкой...
как только перешел на closeEvent() и showEvent() так все и заработало =)
Записан
babutta
Гость
« Ответ #4 : Май 27, 2010, 09:08 »

вот еще раз пришлось столкнуться с этим же... забыл как боролся и в поиске увидел свой пост, нашел свою ошибку и решил поправить =)

После внимательного прочтения ( целого абзаца! =) ) документации оказалось, что никто и не обещал восстановления геометрии главного окна при вызове метода restoreState().

В общем не важно где происходит сохранение в деструкторе или в closeEvent(), как, думаю, не важно и с восстановлением... Важно сохранять и восстанавливать (если это, конечно, требуется) и геометрию и состояние отдельно!

Вот так все работает:
Код:
ActionTest::ActionTest(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    QSettings s;

    restoreGeometry( s.value( APP_GEOMETRY, QByteArray() ).toByteArray() );
    restoreState( s.value( APP_STATE, QByteArray() ).toByteArray() );
}

ActionTest::~ActionTest()
{
    QSettings s;
    
    s.setValue( APP_STATE, saveState() );
    s.setValue( APP_GEOMETRY, saveGeometry() );
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.108 секунд. Запросов: 21.