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

===============>>#1 票数:18 已采纳

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

===============>>#2 票数:18

我发现在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();
}

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

===============>>#3 票数:4

我也遇到过这个问题。

你可以做什么:除了窗口的大小,保存它是否最大化( QWidget::isMaximized() )。

然后,下次启动应用程序时,首先设置大小( QWidget::resize() ),然后在适当的时候最大化它( QWidget::showMaximized() )。 当它恢复时,它应该恢复到正确的大小。

===============>>#4 票数:0

http://qt-project.org/doc/qt-4.8/application-windows.html上的图片显示, geometry.x()geometry.y()不等于x()y() ,这与pos()相同。

就我而言,我使用:

x()
y()
width()
height()

并成功恢复这些:

move()
resize()

  ask by Marius translate from so

未解决问题?本站智能推荐:

1回复

恢复窗口位置

我正在开发QT应用程序,但是从trayicon恢复窗口时遇到问题。 这是与任务栏图标相关的代码: 创建动作 } 因此,当我单击主窗口中的[x]按钮时,应用程序将发送到trayicon,当我单击此trayicon时,将恢复主窗口的大小和位置,这很好。 但是,当我按
2回复

Qt:切换到最大化状态然后全屏时,“正常”窗口大小丢失了

我有一个Qt应用程序,可以显示“正常”(既不最大化也不最小化的正常窗口),最大化或全屏显示。 我通过调用函数QWidget::showNormal() , QWidget::showMaximized()和QWidget::showFullscreen() 。 首先让我解释一下什么有效:
1回复

运行中的对话框大小与Qt设计器中的对话框大小不同

运行中的对话框大小与Qt设计器中的对话框大小不同。 我试图通过将设置更改为属性中的其他选项来解决,但没有帮助。 怎么解决呢? 谢谢您的帮助。
1回复

更改Qt维护工具窗口的宽度?

我想扩大维护工具的窗口。 由于版本页面被截断,用户对它们感到困惑,因为他们看不到新版本是什么。 我试图做一个很长的标题描述,但这没用。 我还没有找到脚本解决方案,但这是我的installscript.js
2回复

无论浏览器窗口大小如何,如何在div中自动将img居中?

我有一个HTML文件,其中包含页眉,内容和页脚div。 我试图将标题div中的图像(徽标)居中显示在网页顶部的中间。 我可以将其绝对定位在中间,但是当我更改浏览器大小时,img不会随之移动。 我希望将其自动放置在窗口中心。 我感到难过..? 我已经尝试过,margin-right:
1回复

在MatLab中更改绘图的窗口大小[重复]

这个问题已经在这里有了答案: 设置图形图形大小 5个答案 我已经绘制了一个图,我需要更改绘图窗口的窗口大小。 请帮忙。
1回复

UWP中的最小窗口大小

在我的UWP应用程序中,我想设置一个最小窗口大小,以便窗口不能小于该大小。 在我搜索的任何地方,似乎使用ApplicationView.PreferredLaunchViewSize是要走的路,但由于某种原因,这在我的应用程序中无效。 我创建了一个空白的UWP应用程序并更新了OnLa
7回复

如何在代码隐藏中恢复最小化的窗口?

这有点是一个平凡的问题,但在我看来,在WPF中没有内置的方法。 似乎只有作为枚举的WindowState属性没有帮助,因为我无法判断Window在最小化之前是处于Normal还是Maximized状态。 单击任务栏图标时,窗口正在按预期恢复,假设其先前状态,但我似乎无法找到任何已定义的方
2回复

如何更改窗口大小?

我正在尝试更改窗口加载的大小。 它似乎不起作用。 这是设置:
2回复

TCP拥塞窗口大小

我正在进行一些修改,我被TCP问题困扰了。 也许有人可以给我快速提示或朝正确的方向推进,以便我可以通过本节。 “为什么TCP中的发送实体在确定滑动窗口大小时需要考虑拥塞窗口的大小?”