QMainWindow设置窗口大小

4
如何设置QMainWindow的frameSize?
为了解释我的意图,我需要满足的要求是程序主窗口的高度等于屏幕高度减去任务栏的高度;但宽度应该远小于现代宽屏监视器的屏幕宽度,因此我不能只是将窗口最大化。
我可以轻松找到屏幕高度减去任务栏的高度,使用availableGeometry()>即可。然而,在窗口上调用这个值并不起作用;据我所知,使内部占据一定的空间,而不是使外部适应一定的空间。文档似乎暗示相关的窗口属性是,但没有提供直接设置它的方法。我可能可以在和之间进行一些试错反馈,但是否有更优雅/惯用的方法来做到这一点呢?
1个回答

7
这并不复杂。在这里可以看到一个漂亮的图表。您可以使用frameGeometry()geometry()来获取框架宽度(水平和垂直),然后在调用resize()(或者如果更合适,调用setFixedSize())之前,从期望的框架大小中减去这些宽度。
唯一可能出错的情况是当调整大小导致框架宽度发生变化时。如果可行,请告诉我!

1
对的,棘手的部分是frameGeometry在窗口第一次显示之后才设置(显然这不是API缺陷,因为Qt事先不知道窗口框架是由主机操作系统绘制的)。解决方法:程序第一次运行时,将窗口显示为一个小框,等待它连接到服务器(从用户的角度来看,这是一个自然的跳跃),然后调整大小到屏幕高度。然后保存结果窗口几何图形以供后续运行使用。 - rwallace
好的,我没有意识到这一点。您可以通过在调整大小后检查保存的框架几何形状是否仍然有效来完美地解决此问题。这样,如果用户更改了桌面样式或其他内容,您只需相应地重新绘制窗口并保存新值以备下次使用。 - TonyK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接