垂直布局管理器QVBoxLayout
在之前学习Qt的过程中,将控件放在界面上,都是依靠“手动”的方式来布局的,但是手动调整的方式是不科学的。
- 手动布局的方式非常复杂,而且不精确
- 无法对窗口大小进行自适应
因此Qt引入布局管理器来解决此类问题。
使用QVBoxLayout表示垂直布局管理器(V 是 vertical 的缩写)
- 核心属性
属性 | 说明 |
---|---|
layoutLeftMargin | 左侧边距 |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上⽅边距 |
layoutBottomMargin | 下方边距 |
layoutSpacing | 相邻元素之间的边距 |
layout只是用于界面布局,并没有提供信号。
例子:使用QVBoxLayout管控多个控件
(1)编写代码,创建三个按钮和一个布局管理器,并且将按钮添加在布局管理器中。
- 使用addWidget将控件添加到布局管理器中。
- 使用setLayout设置布局管理器到widget中。
(2)运⾏程序, 可以看到此时界⾯上的按钮就存在于布局管理器中. 随着窗⼝尺⼨变化⽽发⽣改变
(3)代码实现
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 设置三个按钮
QPushButton* botton1 = new QPushButton("按钮1");
QPushButton* botton2 = new QPushButton("按钮2");
QPushButton* botton3 = new QPushButton("按钮3");
// 设置一个布局管理器
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(botton1);
layout->addWidget(botton2);
layout->addWidget(botton3);
// 将布局管理器设置到widget中
this->setLayout(layout);
}
Widget::~Widget()
{
delete ui;
}
只能设置一个布局管理器。
例子:创建俩个QVBoxlayout
上述例子中,布局管理器只能使Widget设置一个布局管理器,实际也可以在Qt Designer在一个窗口中创建多个布局管理器。
(1)在界面管理器中设置俩个QVBoxlayout,在QVBoxlayout中设置三个按钮
(2)运行程序,可以看到按钮已经根据layout自动排列好,只是并不会通过改变窗口而改变这些按钮
在代码中创建layout,其实只是创建一个layout。如果在 QtDesigner 中创建的layout,会先创建一个Widget,然后再在这个新的Widget中添加layout。这个Widget是窗口的Widget的子类。
layout标签表示的是布局管理器的本体,外面自动创建出了一个Widget,每个layout里面又可以包含若干个item(也就是一个按钮)。
可以先拖拽layout,然后再往 layout 中拖拽其他的控件。
当然也可以拖拽其他控件,然后将这些控件进行选中,最后再给这些控件套上 layout。
这个按钮就是将选中的按钮套上一个垂直布局的 layout。