Qt常用控件之Layout总篇
Layout总篇
1.Layout介绍
Layout 是一类布局管理器,它能够将 Layout 内部的控件都按照某种方式布局,简单高效地使代码更美观。在 Qt 中内置的 layout 有四种:QVBoxLayout
(垂直布局)、QHBoxLayout
(水平布局)、QGridLayout
(网格布局)、QFormLayout
(表单布局)。
在代码中创建的 layout,本质上就只创建了一个 layout。但在 ui 中创建的 layout,本质上是先创建一个 widget,再在这个 widget 中创建一个 layout。这两种方法的直观区别是:代码创建的 layout 会随着窗口尺寸变化而变化,layout 内部的控件也会随之变化;但 ui 创建的 layout 则是固定大小和位置,自然 layout 内部的控件也不会有任何变化。
注意,如果在一个 layout 中某些控件左右可以拉伸,但上下不可拉伸,或上下可以拉伸,左右不可拉伸,这是由该控件的 sizePolicy
属性造成的,sizePolicy
请看->Qt常见控件属性使用方法
2. Layout控件种类
- 垂直布局QVBoxLayout
- 水平布局QHBoxLayout
- 网格布局QGridLayout
- 表单布局QFormLayout
3. Layout嵌套布局
嵌套使用 layout 布局可以使用 addLayout()
完成。注意,在代码中调用 addLayout()
的位置会影响窗口的最终布局:
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QPushButton* button1=new QPushButton("pushButton1");
QPushButton* button2=new QPushButton("pushButton2");
QPushButton* button3=new QPushButton("pushButton3");
QPushButton* button4=new QPushButton("pushButton4");
QPushButton* button5=new QPushButton("pushButton5");
QVBoxLayout* Vlayout=new QVBoxLayout(this);
QHBoxLayout* Hlayout=new QHBoxLayout(this);
Hlayout->addWidget(button2);
Hlayout->addWidget(button3);
//Vlayout->addLayout(Hlayout);
Vlayout->addWidget(button1);
Vlayout->addWidget(button4);
Vlayout->addLayout(Hlayout);
Vlayout->addWidget(button5);
//Vlayout->addLayout(Hlayout);
}
Widget::~Widget()
{
delete ui;
}
不同的调用顺序,会影响最终布局。