Qt 窗口大小自动变化

目录

界面中需要隐藏不常用的设置项,并通过按钮来控制是否显示。窗口大小随控件的隐藏和显示而自动变化。

Qt中的布局管理器(各种Layout类)可以自动管理控件布局,只需将控件添加到各种Layout中,就可以实现布局。 各个Layout类默认随父控件大小变化而变化,就像我们放大窗口,里面控件也会随之拉伸一样。这种关系是父控件变化导致子控件变化。

而我需要的是控件隐藏时,窗口变小,与上面相反,由子控件大小控制父控件大小。

这就需要用到QLayout::SetFixedSize(Layout中主控件大小为sizeHint(),不可放大缩小)。设置为SetFixedSize后,窗口大小固定,仅由内部控件大小决定,窗口没有最大化按钮,也不能拖拽缩放。这样,控件隐藏时,窗口重新计算自己的大小,并自动缩小,反之亦然。

界面

用More按钮(设置为checkable)控制两个GroupBox是否显示,并将More的toggled(bool)信号与GroupBox的setShown(bool)槽连接。

如下图所示

代码

在构造函数中设置size constraint,并隐藏不显示的控件。

ui->gb_switch_more->hide();  
ui->gb_address_more->hide();  
layout()->setSizeConstraint(QLayout::SetFixedSize);  

效果

初始

点击More之后