Restoring a Window's Geometry
本文档介绍如何使用几何属性保存和恢复 窗口的 geometry. 在 Windows 上, 这基本上是存储 QWindow::geometry() 的结果, 并在调用 show() 之前, 在下一个会话中调用 QWindow::setGeometry().
在 X11 上, 这可能不起作用, 因为不可见窗口还没有边框. 窗口管理器稍后装饰窗口. 发生这种情况时, 窗口会根据装饰框的大小向屏幕的右下角移动. 尽管 X 提供了避免这种转变的方法, 但一些窗口管理器未能实现此功能.
使用 Qt Widgets 时, Qt 提供了为你保存和恢复 widget 窗口的几何形状和状态的函数. 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()); }
另一个解决方案是存储 pos() 和 size(), 在调用 show() 之前, 调用 QWidget::resize() 和 move() 恢复几何形状, 如 Application 示例所示.