所有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
QWidget的派生类可以使用QLayout进行布局管理,无需总是调用setLayout()。当指定QLayout的父widget后,布局自动成为顶层布局。布局负责子widget的位置、尺寸计算及动态调整,如字体变化、子widget隐藏等。示例中展示了如何添加QVBoxLayout和QHBoxLayout。
506

被折叠的 条评论
为什么被折叠?



