QMainWindow 设置 frameSize

Posted

技术标签:

【中文标题】QMainWindow 设置 frameSize【英文标题】:QMainWindow set frameSize 【发布时间】:2011-02-04 14:48:11 【问题描述】:

如何设置 QMainWindow 的 frameSize?

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

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

【问题讨论】:

【参考方案1】:

没那么复杂。请参阅here 以获得漂亮的图表。您可以使用frameGeometry()geometry() 来获取帧宽度(水平和垂直),然后您可以在调用resize()(或setFixedSize(),如果这更适合您)之前从所需的帧大小中减去这些宽度) .

这可能出错的唯一方法是框架宽度因调整大小而发生变化。让我知道它是否有效!

【讨论】:

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

以上是关于QMainWindow 设置 frameSize的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 QMainWindow 的 Windows 任务栏标题?

QT:在其他窗口中显示QMainWindow

PyQt4:根据 QMainWindow 的大小设置 QGridLayout 的大小

如何从QDialog刷新/更新/重绘QMainWindow?

setCentralWidget就可以把Qwidget设置为QMainWindow的主窗口

Qt怎样设置QMainWindow窗口中嵌套的QWidget子窗口的背景色