警告

本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。

恢复窗口的几何形状#

如何保存和恢复窗口几何形状。

本文档描述了如何使用几何属性保存和恢复窗口的几何形状。在 Windows 上,这基本上是将 QWindow::geometry() 的结果存储起来,并在下一个会话中在调用 show() 之前调用 QWindow::setGeometry()。

在 X11 上,这可能不起作用,因为不可见的窗口还没有边框。窗口管理器将在稍后装饰窗口。当这种情况发生时,窗口会根据装饰边框的大小朝屏幕的底部/右侧角移动。尽管 X 提供了一种避免这种移动的方法,但一些窗口管理器未能实现此功能。

当使用 Qt Widgets 时,Qt 提供了为您保存和恢复小部件窗口的几何形状和状态的功能。QWidget::saveGeometry() 保存窗口几何形状和最大化/全屏状态,而 QWidget::restoreGeometry() 重新恢复它。恢复函数还会检查恢复的几何形状是否在可用的屏幕几何形状之外,如果是则适当修改它

def closeEvent(self, event):

    settings = QSettings("MyCompany", "MyApp")
    settings.setValue("geometry", saveGeometry())
    settings.setValue("windowState", saveState())
    QMainWindow.closeEvent(event)
def readSettings(self):

    settings = QSettings("MyCompany", "MyApp")
    restoreGeometry(settings.value("myWidget/geometry").toByteArray())
    restoreState(settings.value("myWidget/windowState").toByteArray())

另一种解决方案是同时存储 pos() 和 size(),并在调用 show() 之前使用 QWidget::resize() 和 move() 恢复几何形状。