当前位置:  开发笔记 > 编程语言 > 正文

如何在Qt中的会话之间存储窗口大小?

如何解决《如何在Qt中的会话之间存储窗口大小?》经验,为你挑选了2个好方法。

我在Qt应用程序中有一个QMainWindow.当我关闭它时,我希望它存储当前的恢复大小(窗口大小未最大化时).当我在恢复模式下关闭窗口(即未最大化)时,这很有效.但是,如果我关闭窗口,如果它被最大化,那么下次我启动应用程序并恢复应用程序(因为它以最大化模式启动),然后它不记得它应该恢复到的大小.有没有办法做到这一点?



1> Colin Jensen..:

使用QWidget :: saveGeometry功能将当前设置写入注册表.(使用QSettings访问注册表).然后在启动时使用restoreGeometry()返回到先前的状态.


如果你还想保存dockwidgets的位置和状态,而不仅仅是size,你应该使用QWidget :: saveState()

2> iforce2d..:

我发现在Fedora 14上需要以前所有答案的组合.当窗口最大化时,小心不要保存大小和位置!

void MainWindow::writePositionSettings()
{
    QSettings qsettings( "iforce2d", "killerapp" );

    qsettings.beginGroup( "mainwindow" );

    qsettings.setValue( "geometry", saveGeometry() );
    qsettings.setValue( "savestate", saveState() );
    qsettings.setValue( "maximized", isMaximized() );
    if ( !isMaximized() ) {
        qsettings.setValue( "pos", pos() );
        qsettings.setValue( "size", size() );
    }

    qsettings.endGroup();
}

void MainWindow::readPositionSettings()
{
    QSettings qsettings( "iforce2d", "killerapp" );

    qsettings.beginGroup( "mainwindow" );

    restoreGeometry(qsettings.value( "geometry", saveGeometry() ).toByteArray());
    restoreState(qsettings.value( "savestate", saveState() ).toByteArray());
    move(qsettings.value( "pos", pos() ).toPoint());
    resize(qsettings.value( "size", size() ).toSize());
    if ( qsettings.value( "maximized", isMaximized() ).toBool() )
        showMaximized();

    qsettings.endGroup();
}

在main()中,在第一次显示窗口之前读取位置设置...

MainWindow mainWindow;
mainWindow.readPositionSettings();
mainWindow.show();

...并且这些事件处理程序会根据需要更新设置.(这会导致在移动过程中为每个鼠标移动写入设置文件并调整大小,这是不理想的.)

void MainWindow::moveEvent( QMoveEvent* )
{
    writePositionSettings();
}

void MainWindow::resizeEvent( QResizeEvent* )
{
    writePositionSettings();
}

void MainWindow::closeEvent( QCloseEvent* )
{
    writePositionSettings();
}

不过,位置的垂直分量不是很正确,它似乎忽略了窗口标题栏的高度......如果有人知道如何处理那个让我知道:)

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有