Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QMainWindow设置帧大小_Qt_Qt4 - Fatal编程技术网

Qt QMainWindow设置帧大小

Qt QMainWindow设置帧大小,qt,qt4,Qt,Qt4,如何设置QMainWindow的框架大小 为了解释我要做什么,我需要满足的要求是我的程序主窗口的高度等于屏幕高度减去任务栏;但是它的宽度应该比现代宽屏显示器的屏幕宽度小很多,所以我不能只是最大化窗口 我可以发现屏幕高度减去任务栏没有问题QApplication::desktop()->availableGeometry()。但是,使用此值在窗口上调用resize,不起作用;据我所知,resize使内部占据一定的空间,而不是使外部适合一定的空间。文档似乎建议相关的窗口属性为frameSize,但没

如何设置QMainWindow的框架大小

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


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

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


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

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