加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

qt – 如果最大化,QWidget :: save / restoreGeometry会丢失窗口

发布时间:2020-12-14 03:51:28 所属栏目:Windows 来源:网络整理
导读:我正在编写Qt(在Ubuntu 12.04上为4.8.1)应用程序,它在会话之间存储它的主窗口几何.我注意到如果小部件最大化,qt不存储它的非最大化几何.显然我希望我的应用程序返回到它的非最大化大小,如果它自上次最大化后关闭/启动那么相同.在 主窗口没有最大化并且具有几
我正在编写Qt(在Ubuntu 12.04上为4.8.1)应用程序,它在会话之间存储它的主窗口几何.我注意到如果小部件最大化,qt不存储它的非最大化几何.显然我希望我的应用程序返回到它的非最大化大小,如果它自上次最大化后关闭/启动那么相同.在

>主窗口没有最大化并且具有几何X;
>最大化主窗口;
>将窗口几何(使用QWidget :: saveGeometry)保存到配置文件;
>关闭我的申请;
>再次开始;
>从配置文件加载几何
>恢复(未最大化?;)

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

这是理想的行为吗?或者在qt内部实施是不是也不可能?

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

解决方法

当窗口最大化开始时,您不需要保存几何体.

要获得所需的功能,只需按以下步骤修改步骤:

>主窗口没有最大化并且具有几何X;
>保存几何X也将窗口的左上角位置设为QPoint Y.
>最大化主窗口;
>不要保存几何图形(您可以在保存到配置文件之前使用QWidget :: isMaximized()来确定窗口状态是否最大化).将新的isMaximised状态值保存到配置文件中.
>关闭我的申请;
>再次开始;
>在调用window-> show()之前应用一个window-> resize(lastQSizeSavedinSettingsofNonMaximisedState)和一个window-> move(lastQPointSavedinSettingsofNonMaximisedState)
>现在从config检查isMaximised状态值,如果为true,只需调用QWidget::showMaximized(),否则只需QWidget :: show()
>现在,当您恢复窗口大小时,您应该拥有所需的功能:)

使用窗口大小/状态时要记住一些事项.

始终提供后备几何和位置,以便在应用程序启动时最后保存的位置超出范围,并且您尝试恢复的值不再在屏幕范围内. (这有助于满足某人更改分辨率/监视器数量/监视器位置/虚拟桌面的情况)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读