<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- restoring-geometry.qdoc --> <title>Restoring a Window's Geometry | QtDoc 5.1</title> <link rel="stylesheet" type="text/css" href="style/offline.css" /> </head> <body> <div class="header" id="qtdocheader"></div> <div class="content"> <div class="line"> <div class="content mainContent"> <h1 class="title">Restoring a Window's Geometry</h1> <span class="subtitle"></span> <!-- $$$restoring-geometry.html-description --> <div class="descr"> <a name="details"></a> <p>This document describes how to save and restore a window's geometry using the geometry properties. On Windows, this is basically storing the result of QWindow::geometry() and calling QWindow::setGeometry() in the next session before calling show().</p> <p>On X11, this might not work because an invisible window does not have a frame yet. The window manager will decorate the window later. When this happens, the window shifts towards the bottom/right corner of the screen depending on the size of the decoration frame. Although X provides a way to avoid this shift, some window managers fail to implement this feature.</p> <p>When using QtWidgets, Qt provides functions that saves and restores a widget window's geometry and state for you. QWidget::saveGeometry() saves the window geometry and maximized/fullscreen state, while QWidget::restoreGeometry() restores it. The restore function also checks if the restored geometry is outside the available screen geometry, and modifies it as appropriate if it is:</p> <pre class="cpp"><span class="type">void</span> MyMainWindow<span class="operator">::</span>closeEvent(<span class="type">QCloseEvent</span> <span class="operator">*</span>event) { <span class="type">QSettings</span> settings(<span class="string">"MyCompany"</span><span class="operator">,</span> <span class="string">"MyApp"</span>); settings<span class="operator">.</span>setValue(<span class="string">"geometry"</span><span class="operator">,</span> saveGeometry()); settings<span class="operator">.</span>setValue(<span class="string">"windowState"</span><span class="operator">,</span> saveState()); <span class="type">QMainWindow</span><span class="operator">::</span>closeEvent(event); } <span class="type">void</span> MainWindow<span class="operator">::</span>readSettings() { <span class="type">QSettings</span> settings(<span class="string">"MyCompany"</span><span class="operator">,</span> <span class="string">"MyApp"</span>); restoreGeometry(settings<span class="operator">.</span>value(<span class="string">"myWidget/geometry"</span>)<span class="operator">.</span>toByteArray()); restoreState(settings<span class="operator">.</span>value(<span class="string">"myWidget/windowState"</span>)<span class="operator">.</span>toByteArray()); }</pre> <p>Another solution is to store both pos() and size() and to restore the geometry using QWidget::resize() and move() before calling show(), as demonstrated in the Application example.</p> </div> <!-- @@@restoring-geometry.html --> </div> </div> </div> <div class="footer"> <p> <acronym title="Copyright">©</acronym> 2013 Digia Plc and/or its subsidiaries. Documentation contributions included herein are the copyrights of their respective owners.</p> <br /> <p> The documentation provided herein is licensed under the terms of the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License version 1.3</a> as published by the Free Software Foundation.</p> <p> Documentation sources may be obtained from <a href="http://www.qt-project.org"> www.qt-project.org</a>.</p> <br /> <p> Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. <a title="Privacy Policy" href="http://en.gitorious.org/privacy_policy/">Privacy Policy</a></p> </div> </body> </html>