我正在写Qt(Ubuntu 12.04上的4.8.1)应用程序,它在会话之间存储主窗口几何体。我注意到,如果widget最大化,qt不会存储它的非最大化几何。很显然,我希望我的应用程序能够返回它的非最大化大小,如果它自上次最大化以来已关闭/启动,则大小相同。在QWidget :: save/restoreGeometry如果最大化会丢失窗口大小 - 错误或功能?
- 主窗口未被最大化并且具有几何X;
- 最大化主窗口;
- 保存窗口几何(使用QWidget :: saveGeometry)来配置文件;
- 关闭我的应用程序;
- 重新开始;从配置文件
- 负载几何形状
- 还原(未最大化;?)步骤6窗口被最大化(如预期)
之后,但在步骤7之后,它返回到一些内部缺省大小(即,一个在QtCreator中设计表单时设置),而不是持续非最大化几何X.
这是期望的行为吗?或者是不可能/难以在qt内部实现?
是因为当最大化时,窗口管理器记住非最大化的大小,而不是qt(至少在linux上)?
这意味着我必须始终跟踪我的寡妇大小/位置 - 每次调整大小。第3点不是由我的代码完成的,而是由用户单击窗口栏上的最大化按钮完成的。事实上,在目前的开发阶段,我列出的所有步骤都是由用户单独激活的。无论如何 - 这不是我的问题的重点 - 我知道我的方式围绕小部件的几何形状,并控制它 - 但我认为'QWidget :: saveGeometry'的存在完全是为了摆脱我的担心 - 因为我必须写几何无论如何保存/恢复,是否意味着它没有达到目的(被窃听)? – 2013-02-27 12:56:20
QWidget.cpp确实尝试使用QWidget :: restoreGeometry(...)的QByteArray参数中的windowStates恢复normalGeometry和frameGeometry。我会说如果它不起作用,提出一个QT Bug,因为在另一个bug中https://bugreports.qt-project.org/browse/QTBUG-21371最后一个但是第6个评论指示normalGeometry在去时被重置从全屏/最大化到正常状态,这在Qt 4.7中没有发生。正如我猜你知道有几个解决方法。也不知道Qt 5是否解决了它。这是Qt尝试做某事并且不正确的一个例子= bug – Viv 2013-02-27 14:28:40