MyTetra Share
Делитесь знаниями!
Как запомнить геометрию главного окна
Время создания: 20.03.2016 22:41
Текстовые метки: qt, геометрия, главное окно
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Принципы написания кода
Запись: xintrea/mytetra_syncro/master/base/1415558116cz7xjvo0uj/text.html на raw.github.com

1.


Чтобы нормально работали saveState() и restoreState().. надо чтобы для всех обьектов которые сохраняются и восстанавливаются, были заданны имена (в дизанере например)


2.

Имена объектов заданы конечно (через setObjectName()) для всех уникальные, иначе бы этот механизм вообще не работал. а он работает, только не так как должен =(


3.

В общем проблема решена... не без посторонних внимательных глаз =)

Ошибка была в том, что я пользовался конструктором и деструктором для восстановления и сохранения состояния соответственно...

так вот восстановление состояния на конструкторе было ошибкой...

как только перешел на closeEvent() и showEvent() так все и заработало =)


4.

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


После внимательного прочтения ( целого абзаца! =) ) документации оказалось, что никто и не обещал восстановления геометрии главного окна при вызове метода 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() );

}


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования