Wiederherstellung der Geometrie eines Fensters

In diesem Dokument wird beschrieben, wie die Geometrie eines Fensters mithilfe der Geometrieeigenschaften gespeichert und wiederhergestellt werden kann. Unter Windows bedeutet dies im Wesentlichen, das Ergebnis von QWindow::geometry() zu speichern und QWindow::setGeometry() in der nächsten Sitzung aufzurufen, bevor show() aufgerufen wird.

Unter X11 funktioniert dies möglicherweise nicht, da ein unsichtbares Fenster noch keinen Rahmen hat. Der Fenstermanager wird das Fenster später dekorieren. Wenn dies geschieht, verschiebt sich das Fenster in Richtung der unteren/rechten Ecke des Bildschirms, abhängig von der Größe des Dekorationsrahmens. Obwohl X eine Möglichkeit bietet, diese Verschiebung zu vermeiden, haben einige Fenstermanager diese Funktion nicht implementiert.

Bei der Verwendung von Qt Widgetsverwendet, bietet Qt Funktionen, die die Geometrie und den Zustand eines Widget-Fensters für Sie speichern und wiederherstellen. QWidget::saveGeometry() speichert die Geometrie und den Zustand des Fensters in maximierter Form bzw. im Vollbildmodus, während QWidget::restoreGeometry() sie wiederherstellt. Die Wiederherstellungsfunktion prüft auch, ob die wiederhergestellte Geometrie außerhalb der verfügbaren Bildschirmgeometrie liegt, und ändert sie entsprechend, wenn dies der Fall ist:

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());
}

Eine andere Lösung besteht darin, sowohl pos() als auch size() zu speichern und die Geometrie mit QWidget::resize() und move() wiederherzustellen, bevor show() aufgerufen wird.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.