Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Qt之保存/恢复窗口的几何形状

$
0
0

简述

本节介绍如何使用geometry属性保存和恢复窗口的几何形状。在Windows中,基本上是存储QWindow::geometry()的结果,并在下次会话调用show()之前,调用QWindow::setGeometry()。

在X11中,这可能无法工作,因为一个不可见的窗口没有边框。后来窗口管理器将装饰窗口。当这种情况发生时,窗口朝向屏幕的底部/右下角移动取决于装饰框的大小。虽然X提供了一种方法来避免这种转变,有些窗口管理器仍无法实现此功能。

详细描述

当使用Qt Widgets时,Qt提供了保存和恢复一个窗口部件的几何形状和状态的函数。QWidget::saveGeometry()保存窗口的尺寸和最大化/全屏状态,而QWidget::restoreGeometry()用来恢复它。恢复函数还检查恢复几何形状是否超出可用的屏幕几何形状,如果超过了,则会适当地进行修改。

保存/恢复几何形状的方式有两种:

  • 保存/恢复geometry()
  • 保存/恢复pos()、size()

保存/恢复geometry()

保存几何形状

一般情况下,在程序退出之前,保存最后一次的几何形状和位置。

void MyMainWindow::closeEvent(QCloseEvent *event)
{
    QSettings settings("MyCompany", "MyApp");
    settings.setValue("geometry", saveGeometry());
    settings.setValue("windowState", saveState());
    QMainWindow::closeEvent(event);
}

恢复几何形状

在show()之前,然后读取上次保存的信息,一般在构造函数中调用。

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() 。

保存/恢复pos()、size()

保存几何形状

一般情况下,在程序退出之前,保存最后一次的几何形状和位置。常在closeEvent()中调用。

void MainWindow::writeSettings()
{
    QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
    settings.setValue("geometry", saveGeometry());
}

恢复几何形状

在show()之前,然后读取上次保存的信息,一般在构造函数中调用。

void MainWindow::readSettings()
{
    QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
    const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray();
    if (geometry.isEmpty()) {
        const QRect availableGeometry = QApplication::desktop()->availableGeometry(this);
        resize(availableGeometry.width() / 3, availableGeometry.height() / 2);
        move((availableGeometry.width() - width()) / 2,
               (availableGeometry.height() - height()) / 2);
    } else {
          restoreGeometry(geometry);
    }
}
作者:u011012932 发表于2016/9/2 22:04:45 原文链接
阅读:70 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>