
Сохранение и восстановление позиции и размеров главного окна при запуске и завершении программы
Сегодня мы рассмотрим сохранение позиции главного окна при выходе из программы и восстановление его позиции при повторном запуске.
Создадим новый проект Qt Widgets и назовем его PosSaveRestore
Класс для сохранения состояния
Для того, чтобы сохранять состояние окна, напишем создадим новый класс – MainWindowState
Заголовок:
#ifndef MAINWINDOWSTATE_H
#define MAINWINDOWSTATE_H
#include <QPoint>
#include <QSize>
class MainWindowState
{
public:
explicit MainWindowState();
void SaveState(const QPoint &pos, const QSize &size);
void RestoreState(QPoint &pos, QSize &size);
};
#endif // MAINWINDOWSTATE_H
Реализация:
#include "mainwindowstate.h"
#include <QSettings>
MainWindowState::MainWindowState()
{
}
void MainWindowState::SaveState(const QPoint &pos, const QSize &size)
{
QSettings settings("AltuninVV", "PosSizeDemo");
settings.beginGroup("MainWindow");
settings.setValue("pos", pos);
settings.setValue("size", size);
settings.endGroup();
}
void MainWindowState::RestoreState(QPoint &pos, QSize &size)
{
QSettings settings("AltuninVV", "PosSizeDemo");
settings.beginGroup("MainWindow");
QPoint oldPoint = settings.value("pos", QPoint(0, 0)).toPoint();
if (oldPoint.x()!=0 && oldPoint.y()!=0) //check if there old values
{
pos.setX(oldPoint.x());
pos.setY(oldPoint.y());
}
QSize oldSize = settings.value("size", QSize(0, 0)).toSize();
if (oldSize.width()!=0 && oldSize.height()!=0) //check if there old values
{
size.setWidth(oldSize.width());
size.setHeight(oldSize.height());
}
settings.endGroup();
}
Метод SaveState() позволяет нам сохранить состояние окна, а метод RestoreState() это состояние восстановить.
Использование класса
Добавим в конструктор главного окна код:
QPoint pos;
QSize size;
state.RestoreState(pos, size);
this->move(pos);
this->resize(size);
Здесь мы объявляем две переменные, одна для хранения положения окна, вторая для размеров.
После этого вызываем метод класса RestoreState() передавая аргументы по ссылке.
Затем перемещаем окно в новую позицию и изменяем его размер.
Обратите внимание, что при первом запуске окно будет выглядеть так:
Вы можете добавить дополнительные проверки и задать значения по умолчанию для положения и размера, так как при первом запуске они будут равны нулю.
Добавим в деструктор класса MainWindow::~MainWindow() перед строкой:
delete ui;
Следующий код:
state.SaveState(this->pos(), this->size());
Здесь мы сохраняем положение и размер окна.
Заключение
Сегодня мы рассмотрели сохранение состояния окна – положение и размера, между запусками программы для чего был создан класс для сохранения и восстановления состояния.
Исходный код вы можете найти на GitFlic
Добавить комментарий