Восстановление геометрии оконДанный документ описывает как сохранить и восстановить геометрию окна используя свойства геометрии. В Windows решение данной задачи состоит в сохранении QWidget::geometry() и вызове QWidget::setGeometry() в следующей сессии перед вызовом show(). В X11 это не будет работать, так как неотображённое окно не имеет рамки. Оконный менеджер оформит окно позже. Когда это происходит, окно сдвигается к правому нижнему углу экрана, в зависимости от оформляющей рамки. Хотя X и предоставляет способ избежать этого перемещения, наши испытания показали, что некоторые оконные менеджеры не в состоянии реализовать данную возможность. Начиная с 4.2, Qt обеспечивает функции, которые сохраняют и восстанавливают размеры и положение окон. QWidget::saveGeometry() сохраняет геометрию окна и полноэкранное или развёрнутое состояние, пока QWidget::restoreGeometry() не восстановит их. Функция восстановления также проверяет не выходит ли восстановленная геометрия за пределы геометрии окна и если это произошло, соответственно модифицирует её: void MyMainWindow::closeEvent(QCloseEvent *event) { QSettings settings("MyCompany", "MyApp"); settings.setValue("geometry", saveGeometry()); settings.setValue("windowState", saveState()); QMainWindow::closeEvent(event); } void MainWindow::readSettings() { QSettings settings("MyCompany", "MyApp"); restoreGeometry(settings.value("myWidget/geometry").toByteArray()); restoreState(settings.value("myWidget/windowState").toByteArray()); } Если эти функции недоступны или не могут быть использованы, тогда решением будет вызов setGeometry() после show(). Это имеет два неудобства: на миллисекунды виджет отображается в неправильном положении (в результате эффект мерцания) и что в настоящий момент только каждый второй оконный менеджер может сделать это правильно. Более безопасное решение состоит в сохранении pos() и size() и восстановлении геометрии с помощью QWidget::resize() и move() перед вызовом show(), как показано в примере Application. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |