2011-02-04 51 views
3

如何设置QMainWindow的frameSize?QMainWindow set frameSize

为了解释我在做什么,我需要满足的要求是我的程序主窗口的高度等于屏幕高度减去任务栏;但宽度应该比现代宽屏幕显示器的屏幕宽度小得多,所以我不能只是最大化窗口。

我可以找到屏幕高度减去任务栏没有问题QApplication::desktop()->availableGeometry()。然而,使用此值在窗口上调用resize不起作用;据我所知,resize使内部占据一定的空间,而不是使外部适合一定的空间。该文档似乎建议相关窗口属性为frameSize,但不提供设置它的直接方式。我可以在resizeframeSize之间做一些试验和错误的反馈,但是有没有更优雅/习惯的方法来做到这一点?

回答

6

这并不复杂。看到here一个很好的图。您可以使用frameGeometry()geometry()来获取帧宽(水平和垂直),然后在调用resize()(或setFixedSize(),如果这对您更合适)之前,您可以从所需的帧大小中减去它们。

这可能出错的唯一方法是如果帧宽度因调整大小而改变。让我知道它是否有效!

+1

对,棘手的部分是frameGeometry没有设置,直到第一次显示窗口(显然这不是API缺陷,Qt只是事先不知道,因为窗口框架是由主机绘制的操作系统)。解决方法解决方案:首次运行程序时,将窗口显示为一个小框,等待与服务器连接(从用户的角度来看是自然跳转),然后调整屏幕高度。然后保存生成的窗口几何图形以供后续运行。 – rwallace 2011-02-06 00:04:15