我在Qt应用程序中有一个QMainWindow。 当我关闭它时,我希望它存储当前的恢复大小(窗口大小未最大化时)。 当我在恢复模式下关闭窗口(即未最大化)时,这很有效。 但是,如果我关闭窗口,如果它被最大化,那么下次我启动应用程序并恢复应用程序(因为它以最大化模式启动),然后它不记得它应该恢复到的大小。 有没有办法做到这一点?
如何在Qt中的会话之间存储窗口大小?
How do I store the window size between sessions in Qt?
===============>>#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中的发送实体在确定滑动窗口大小时需要考虑拥塞窗口的大小?”