gpt4 book ai didi

qt - QWidget::save/restoreGeometry 如果最大化会丢失窗口大小 - 错误或功能?

转载 作者:行者123 更新时间:2023-12-04 13:01:33 25 4
gpt4 key购买 nike

我正在编写 Qt(Ubuntu 12.04 上的 4.8.1)应用程序,它在 session 之间存储它的主窗口几何图形。我注意到如果小部件最大化,qt 不会存储它的非最大化几何。显然,如果我的应用程序自上次最大化后关闭/启动,我希望我的应用程序返回到它的非最大化大小。在

  • 主窗口未最大化且具有几何 X;
  • 最大化主窗口;
  • 保存窗口几何图形(使用 QWidget::saveGeometry)到配置文件;
  • 关闭我的申请;
  • 重新开始;
  • 从配置文件
  • 加载几何图形
  • 恢复(取消最大化?;)

  • 在步骤 6 之后窗口最大化(如预期的那样),但在步骤 7 之后它返回到某个内部默认大小(即在 QtCreator 中设计表单时的一组),而不是最后一个未最大化的几何 X。

    这是期望的行为吗?或者在 qt 中实现是不可能/困难的?

    是因为最大化时,窗口管理器会记住非最大化大小而不是qt(至少在linux上)?

    最佳答案

    4. Do NOT save geometry (You can figure if window state is maximized using QWidget::isMaximized() before saving to config file). Save a new isMaximised state value to config file instead.


    这里的另一个问题是:窗口不仅会根据其在屏幕上的位置进行最大化/最小化,还会根据窗口的大部分位置进行最大化/最小化。如果 80% 的窗口在屏幕 1 上,但左上角在屏幕 2 上,则最大化的窗口将在屏幕 1 上。

    不过,你的想法是最好的。经过一个多小时的谷歌(使用 QT5),我现在使用:

    写设置:
    settings.setValue("pos", pos());
    if(!isMaximized())
    settings.setValue("size", size());
    settings.setValue("maximized", isMaximized());

    读取设置:
    if(settings.contains("pos"))
    move(settings.value("pos").toPoint());
    if(settings.contains("size"))
    resize(settings.value("size").toSize());

    if(settings.value("maximized").toBool())
    setWindowState(windowState() | Qt::WindowMaximized);

    关于qt - QWidget::save/restoreGeometry 如果最大化会丢失窗口大小 - 错误或功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15111788/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com