所有QWidget
的派生类都可以使用布局来管理它们的孩子们,QWidget::setLayout()
方法可以把一个布局应用到一个widget
上。有读者说了,有时貌似没调用QWidget::setLayout()
呀,没错,我们确实没有调用它,不过事情还是照常运转了。原因在于QLayout
的构造函数QLayout(QWidget* parent)
,当你指定了parent
之后,这个布局就会作为parent
这个widget
的顶层布局,无需再调用setLayout()
,而QWidget::layout()
也会返回你创建的那个layout
。
一旦为QWidget
设置了布局,布局就会负责接管下列任务:
- 把子
widget
们安排到合适的位置。自动计算窗口的默认尺寸。 - 自动计算窗口的最小尺寸。尺寸变化处理。
当widget
的内容变化时自动更新调整整个UI的布局,下面这些变化会引起布局调整:
- 字体、文本以及其他内容。隐藏或显示一个子
widget
。 - 移除某些子
widgets
。
QVBoxLayout* mainLayout = new QVBoxLayout(this);// #this
QHBoxLayout* line;
......
mainLayout->addLayout(line);// #addLayout