目录
前言:
使用Qt时,在没有布局管理器(Layout)概念之前,在界面上创建控件都是用“绝对定位”来设置的,即调用setGeometry或move函数摆放,或者直接在ui文件中对控件进行手动的摆放,这些方式都会导致界面上的控件摆放存在偏差,影响整体美观。因此引入布局管理器机制,将界面上的控件都直接放到布局管理器下,布局管理器会自动对这些控件进行位置大小的调整,让整个界面看起来更加规整。
1、QVBoxLayout垂直布局
QVBoxLayout表示垂直布局管理器,他也是一个控件,只不过该控件的作用是对内部的其他控件进行规整摆放。QVBoxLayout属性介绍如下:
|
layoutLeftMargin
|
左侧边距
|
|
layoutRightMargin
|
右侧边距
|
|
layoutTopMargin
|
上方边距 |
|
layoutBottomMargin
|
下方边距 |
|
layoutSpacing
|
相邻元素之间的间距
|
与QVBoxLayout相关的常用接口:
| addWidget(QWidget*) |
把控件添加到布局管理器中
|
| setLayout(QLayout*) | 是QWidget的接口,用于将布局管理器设置到widget下 |
1.1 QVBoxLayout的使用
创建一个QVBoxLayout和三个按钮控件,将三个按钮控件放到该QVBoxLayout下,观察生成后的界面,代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QPushButton>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QVBoxLayout* qv = new QVBoxLayout();//创建垂直布局管理器
//创建三个按钮
QPushButton* qp1 = new QPushButton("按钮1");
QPushButton* qp2 = new QPushButton("按钮2");
QPushButton* qp3 = new QPushButton("按钮3");
//将三个按钮放到管理器下
qv->addWidget(qp1);
qv->addWidget(qp2);
qv->addWidget(qp3);
//将管理器设置到当前widge下
this->setLayout(qv);
}
Widget::~Widget()
{
delete ui;
}
运行结果:

从结果可以发现三个按钮规章有序的显示在界面上,并且对widget界面进行拉伸时,这三个按钮也会跟着拉伸的比例变化,如果这三个按钮直接放到widget界面上,则按钮尺寸不会随着widget界面的尺寸变化而变化。能够实现这个效果的原因是布局管理器作用在widget上,换句话说,一个widget只能有一个布局管理器并且布局管理器就是widget本身,所以对widget界面进行尺寸拉伸时,实际上就是对布局管理器做拉伸,进而导致布局管理器里的控件也跟着拉伸了。
1.2 多个布局管理器
虽然一个widget下只能有一个布局管理器,但是可以通过ui文件中界面创建的方式在一个widget下生成多个布局管理器,操作如下:

但是在运行程序后,发现对最终的界面进行拖拽则无法影响界面上的按钮,如下图:

最低0.47元/天 解锁文章
2494

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



