1.作用
在水平/垂直方向上让ui中的组件可以对齐2.三种常用的布局管理器
水平布局管理器:QHBoxLayout 在水平方向对齐组件
垂直布局管理器:QVBoxLayout 在垂直方向对齐组件
网格(栅格)布局管理器:QGridLayout 可以把布局好的界面嵌套到主窗口中(点击主窗口,然后选择栅格布局)3.常用技巧
(1)如何让组件大小固定
修改属性:minimumsize //最小尺寸
maxmumsize //最大尺寸
最小最大尺寸一样--》组件就固定死了,最大和最小尺寸决定了组件变化
(2)使用分隔器
水平和垂直分隔器,可以把组件在水平/垂直方向间距自由拉伸4.代码实现布局(以布局登录界面为例)
第一步:定义水平布局管理器--》把登录和注册按钮在水平方向上对齐
QHBoxLayout(QWidget *parent) //构造函数
参数:parent --》父窗口this
void QBoxLayout::addWidget(QWidget *widget) //把你要水平对齐的组件作为参数添加到水平布局管理器
参数: widget --》你要添加进来的组件(登录和注册按钮)
void QBoxLayout::addStretch(int stretch = 0)
参数: stretch --》伸缩量,按照比例把空白部分分开第二步:定义垂直布局管理器
QVBoxLayout(QWidget *parent) //构造函数
void QBoxLayout::addWidget(QWidget *widget) //把你要垂直对齐的组件作为参数添加到垂直布局管理器
参数: widget --》你要添加进来的组件
void QBoxLayout::addLayout(QLayout *layout) //把另外一个布局管理器添加到当前布局管理器中
参数:layout --》你要添加进来的布局管理器
QLayout是水平,垂直,栅格它们的父类
遇到的问题
问题一: QHBoxLayout *hlayout=new QHBoxLayout(this); //错误的,布局管理器不能作用于主窗口this
问题二: 最顶层的布局管理器必须作用于中心窗口区域
什么是最顶层的布局管理器?
一个布局管理器包含了其它所有的组件和布局管理器,这个就是最顶层的
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGridLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建网格布局管理器对象
QGridLayout *glayout=new QGridLayout(ui->centralwidget);
//把三个按钮添加进来
//glayout->addWidget(ui->pushButton,0,0);
//glayout->addWidget(ui->pushButton_2,0,1);
//glayout->addWidget(ui->pushButton_3,0,2);
//把三个按钮添加进来
//glayout->addWidget(ui->pushButton,0,0);
//glayout->addWidget(ui->pushButton_2,1,0);
//glayout->addWidget(ui->pushButton_3,2,0);
//把三个按钮添加进来
glayout->addWidget(ui->pushButton,0,0);
glayout->addWidget(ui->pushButton_2,0,1);
glayout->addWidget(ui->pushButton_3,1,0);
}
MainWindow::~MainWindow()
{
delete ui;
}
#include "loginwin.h"
#include "ui_loginwin.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
loginwin::loginwin(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::loginwin)
{
ui->setupUi(this);
//创建一个水平布局管理器对象
QHBoxLayout *hlayout=new QHBoxLayout();
//把登录按钮和注册按钮添加到水平布局管理器中
hlayout->addWidget(ui->pushButton);
hlayout->addWidget(ui->pushButton_2);
//创建一个垂直布局管理器
QVBoxLayout *vlayout=new QVBoxLayout(ui->centralwidget);
//把标签,两个输入框,以及刚才布局好的水平布局管理器添加到垂直布局管理器里面
vlayout->addWidget(ui->label);
vlayout->addWidget(ui->lineEdit);
vlayout->addWidget(ui->lineEdit_2);
vlayout->addLayout(hlayout); //把刚才的水平布局管理器添加进来
}
loginwin::~loginwin()
{
delete ui;
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建一个水平布局管理器
QHBoxLayout *hlayout=new QHBoxLayout(ui->centralwidget);
hlayout->addStretch(1);
hlayout->addWidget(ui->pushButton);
hlayout->addStretch(1);
hlayout->addWidget(ui->pushButton_2);
hlayout->addStretch(1);
}
MainWindow::~MainWindow()
{
delete ui;
}