QT:控件属性及常用控件(4)-----多元素控件、容器类控件、布局管理器
在此之前我们要看一看XXview和XXWidget之间的区别
文章目录
- 一、多元素控件
- 1. List Widget
- 通过List Widget生成一个可添加可删除的列表
- 2. Table Widget
- 通过Table Widget生成一个可添加可删除的表格
- 3. Tree Widget
- 通过Tree Widget生成一个可添加可删除的树形表
- 二、容器类控件
- 1. GroupBox
- 2. TabWidget
- 三、布局管理器
- 1. 垂直布局(QVBoxLayout)
- 设置多个布局管理器
- 2. 水平布局(QHBoxLayout,布局管理器嵌套)
- 3. 网格布局(QGridLayout)
- 拉伸系数
- 4. 表单布局(QFormLayout)
- 5. 空白(Spacer)
一、多元素控件
1. List Widget
使⽤QListWidget 能够显⽰⼀个纵向的列表.每个选项都可以被选中.
属性 | 说明 |
---|---|
currentRow | 当前被选中的是第⼏⾏ |
count | ⼀共有多少⾏ |
sortingEnabled | 是否允许排序 |
isWrapping | 是否允许换⾏ |
itemAlignment | 元素的对⻬⽅式 |
selectRectVisible | 被选中的元素矩形是否可⻅ |
spacing | 元素之间的间隔 |
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
方法 | 说明 |
---|---|
addItem(constQString&label),addItem(QListWidgetItem*item) | 列表中添加元素 |
currentItem() | 返回QListWidgetItem*表⽰当前选中的元素 |
setCurrentItem(QListWidgetItem*item) | 设置选中哪个元素 |
setCurrentRow(introw) | 设置选中第⼏⾏的元素 |
insertItem(constQString&label,introw), insertItem(QListWidgetItem*item,int row) | 在指定的位置插⼊元素 |
item(introw) | 返回QListWidgetItem*表⽰第row⾏的元素 |
takeItem(introw) | 删除指定⾏的元素,返回QListWidgetItem*表⽰是哪个元素被删除了 |
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
信号 | 说明 |
---|---|
currentItemChanged(QListWidgetItem* current,QListWidgetItem*old) | 选中不同元素时会触发.参数是当前选中的元素和之前选中的元素 |
currentRowChanged(int) | 选中不同元素时会触发.参数是当前选中元素的⾏数. |
itemClicked(QListWidgetItem*item) | 点击某个元素时触发 |
itemDoubleClicked(QListWidgetItem*item) | 双击某个元素时触发 |
itemEntered(QListWidgetItem*item) | ⿏标进⼊元素时触发 |
其可以直接在这里改变类型
通过List Widget生成一个可添加可删除的列表
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->listWidget->addItem("关羽");
ui->listWidget->addItem("吕布");
ui->listWidget->addItem("孙策");
ui->listWidget->addItem("典韦");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_add_clicked()
{
//获取文本内容
const QString& text = ui->lineEdit->text();
ui->listWidget->addItem(text);
}
void Widget::on_pushButton_remove_clicked()
{
//获取被选中的元素是哪一个
int row = ui->listWidget->currentRow();
if(row < 0){
return;
}
//按照行号删除元素
ui->listWidget->takeItem(row);
}
void Widget::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
//通过槽函数感知变化
if(current != nullptr){
qDebug() << "当前选中的武将:" << current->text();
}
if(previous != nullptr){
qDebug() << "上次选中的武将:" << previous->text();
}
}
2. Table Widget
使⽤QTableWidget 表⽰⼀个表格控件.⼀个表格中包含若⼲⾏,每⼀⾏⼜包含若⼲列.表格中的每个单元格,是⼀个QTableWidgetItem 对象.
方法 | 说明 |
---|---|
item(int row, int column) | 根据⾏数列数获取指定的QTableWidgetItem* |
setItem(int row, int column,QTableWidget*) | 根据行数列数设置表格中的元素 |
currentItem() | 返回被选中的元素QTableWidgetItem* |
currentRow() | 返回被选中元素是第⼏⾏ |
currentColumn() | 返回被选中元素是第⼏列 |
row(QTableWidgetItem*) | 获取指定item是第⼏⾏ |
column(QTableWidgetItem*) | 获取指定item是第⼏列 |
rowCount() | 获取⾏数 |
columnCount() | 获取列数 |
insertRow(introw) | 在第row⾏处插⼊新⾏ |
insertColumn(int column) | 在第column列插⼊新列 |
removeRow(int row) | 删除第row⾏ |
removeColumn(int column) | 删除第column列 |
setHorizontalHeaderItem(int column,QTableWidget*) | 设置指定列的表头 |
setVerticalHeaderItem(introw, QTableWidget*) | 设置指定⾏的表头 |
row() | 获取⾏数 |
column() | 获取当前是第⼏列 |
setText(const QString&) | 设置⽂本 |
setTextAlignment(int) | 设置⽂本对⻬ |
setIcon(const QIcon&) | 设置图标 |
setSelected(bool) | 设置被选中 |
setSizeHints(const QSize&) | 设置尺⼨ |
setFont(const QFont&) | 设置字体 |
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
信号 | 说明 |
---|---|
cellClicked(introw,intcolumn) | 点击单元格时触发 |
cellDoubleClicked(introw,int column) | 双击单元格时触发 |
cellEntered(introw,intcolumn) | ⿏标进⼊单元格时触发 |
currentCellChanged(introw,int column,intpreviousRow,int previousColumn) | 选中不同单元格时触发 |
通过Table Widget生成一个可添加可删除的表格
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//插入行
ui->tableWidget->insertRow(0);
ui->tableWidget->insertRow(1);
ui->tableWidget->insertRow(2);
//插入列
ui->tableWidget->insertColumn(0);
ui->tableWidget->insertColumn(1);
ui->tableWidget->insertColumn(2);
//给行取名字
ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("武将"));
ui->tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("阵营"));
ui->tableWidget->setHorizontalHeaderItem(2,new QTableWidgetItem("是否为鼠辈"));
//给列添加数据
ui->tableWidget->setItem(0,0,new QTableWidgetItem("关羽"));
ui->tableWidget->setItem(0,1,new QTableWidgetItem("蜀国"));
ui->tableWidget->setItem(0,2,new QTableWidgetItem("否"));
ui->tableWidget->setItem(1,0,new QTableWidgetItem("吕布"));
ui->tableWidget->setItem(1,1,new QTableWidgetItem("群雄"));
ui->tableWidget->setItem(1,2,new QTableWidgetItem("否"));
ui->tableWidget->setItem(2,0,new QTableWidgetItem("孙权"));
ui->tableWidget->setItem(2,1,new QTableWidgetItem("吴国"));
ui->tableWidget->setItem(2,2,new QTableWidgetItem("是"));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_addrow_clicked()
{
//了解一共有多少行
int hang = ui->tableWidget->rowCount();
//在这一行后插入一行
ui->tableWidget->insertRow(hang);
}
void Widget::on_removerow_clicked()
{
//获取选中的行号
int number = ui->tableWidget->currentRow();
//删除这一行
ui->tableWidget->removeRow(number);
}
void Widget::on_addcolumn_clicked()
{
//获取一共有几列
int lie = ui->tableWidget->columnCount();
//在这一列后插入一列
ui->tableWidget->insertColumn(lie);
//设置列的内容
const QString& text = ui->lineEdit->text();
ui->tableWidget->setHorizontalHeaderItem(lie,new QTableWidgetItem(text));
}
void Widget::on_removecolumn_clicked()
{
//获取当前列
int lie = ui->tableWidget->currentColumn();
ui->tableWidget->removeColumn(lie);
}
3. Tree Widget
使⽤QTreeWidget 表⽰⼀个树形控件.⾥⾯的每个元素,都是⼀个QTreeWidgetItem ,每个QTreeWidgetItem 可以包含多个⽂本和图标,每个⽂本/图标为⼀个列.可以给QTreeWidget 设置顶层节点(顶层节点可以有多个),然后再给顶层节点添加⼦节点,从⽽构成树形结构.
其没有根节点,是从根节点外的节点开始(即顶层节点!)
属性 | 说明 |
---|---|
text | 持有的⽂本 |
textAlignment | ⽂本对⻬⽅式 |
icon | 持有的图表 |
font | ⽂本字体 |
hidden | 是否隐藏 |
disabled | 是否禁⽤ |
expand | 是否展开 |
sizeHint | 尺⼨⼤⼩ |
selected | 是否选中 |
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
方法 | 说明 |
---|---|
clear | 清空所有⼦节点 |
addTopLevelItem(QTreeWidgetItem*item) | 新增顶层节点 |
topLevelItem(intindex) | 获取指定下标的顶层节点. |
topLevelItemCount() | 获取顶层节点个数 |
indexOfTopLevelItem(QTreeWidgetItem* item) | 查询指定节点是顶层节点中的下标 |
takeTopLevelItem(intindex) | 删除指定的顶层节点.返回QTreeWidgetItem*表⽰被删除的元素 |
currentItem() | 获取到当前选中的节点,返回QTreeWidgetItem* |
setCurrentItem(QTreeWidgetItem*item) | 选中指定节点 |
setExpanded(bool) | 展开/关闭节点 |
setHeaderLabel(constQString&text) | 设置TreeWidget的header名称. |
addChild(QTreeWidgetItem*child) | 新增⼦节点 |
childCount() | ⼦节点的个数 |
child(intindex) | 获取指定下标的⼦节点.返回QTreeWidgetItem* |
takeChild(intindex) | 删除对应下标的⼦节点 |
removeChild(QTreeWidgetItem* child) | 删除对应的⼦节点 |
parent() | 获取该元素的⽗节点 |
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
信号 | 说明 |
---|---|
currentItemChanged(QTreeWidgetItem* current,QTreeWidgetItem*old) | 切换选中元素时触发 |
itemClicked(QTreeWidgetItem*item,intcol) | 点击元素时触发 |
itemDoubleClicked(QTreeWidgetItem*item, intcol) | 双击元素时触发 |
itemEntered(QTreeWidgetItem*item,intcol) | ⿏标进⼊时触发 |
itemExpanded(QTreeWidgetItem*item) | 元素被展开时触发 |
itemCollapsend(QTreeWidgetItem*item) | 元素被折叠时触发 |
基本使用方法可以在ui界面:
通过Tree Widget生成一个可添加可删除的树形表
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置根节点的名字
ui->treeWidget->setHeaderLabel("三国");
//顶层节点
QTreeWidgetItem* item1 = new QTreeWidgetItem();
item1->setText(0,"魏国");
ui->treeWidget->addTopLevelItem(item1);
QTreeWidgetItem* item2 = new QTreeWidgetItem();
item2->setText(0,"蜀国");
ui->treeWidget->addTopLevelItem(item2);
QTreeWidgetItem* item3 = new QTreeWidgetItem();
item3->setText(0,"吴国");
ui->treeWidget->addTopLevelItem(item3);
QTreeWidgetItem* item4 = new QTreeWidgetItem();
item4->setText(0,"群雄");
ui->treeWidget->addTopLevelItem(item4);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_addtop_clicked()
{
//获取输入框的内容
const QString& text = ui->lineEdit->text();
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,text);
ui->treeWidget->addTopLevelItem(item);
}
void Widget::on_pushButton_addchild_clicked()
{
//获取当前选中的节点
QTreeWidgetItem* currentitem = ui->treeWidget->currentItem();
if(currentitem == nullptr){
return;
}
//获取输入框的内容
const QString& text = ui->lineEdit->text();
QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0,text);
currentitem->addChild(item);
}
void Widget::on_pushButton_remove_clicked()
{
//获取到选中元素
QTreeWidgetItem* currenttem = ui->treeWidget->currentItem();
if(currenttem == nullptr){
return;
}
//删除选中的元素,需要先得到父元素
QTreeWidgetItem* parentsitem = currenttem->parent();//先获取父元素
if(parentsitem == nullptr){
//顶层元素
int index = ui->treeWidget->indexOfTopLevelItem(currenttem);//获取是第几个顶层元素的下标
ui->treeWidget->takeTopLevelItem(index);//删除节点
}else{
//子节点
parentsitem->removeChild(currenttem);
}
}
二、容器类控件
1. GroupBox
使⽤QGroupBox 实现⼀个带有标题的分组框.可以把其他的控件放到⾥⾯作为⼀组.这样看起来能更好看⼀点.
属性 | 说明 |
---|---|
title | 分组框的标题 |
alignment | 分组框内部内容的对⻬⽅式 |
flat | 是否是"扁平"模式 |
font | ⽂本字体 |
checkable | 是否可选择.设为true,则在title前⽅会多出⼀个可勾选的部分 |
checked | 描述分组框的选择状态(前提是checkable为true) |
🌰分组框只是⼀个⽤来"美化界⾯"这样的组件,并不涉及到⽤⼾交互和业务逻辑.属于"锦上添 花".
可以把其他的各种控件放到GroupBox中,这时候内部的控件的父元素就不是this了,而是GroupBox
之前我们使用下面的这种分组方式,有了GroupBox我们就能更好地实现分组了:
2. TabWidget
使⽤QTabWidget 实现⼀个带有标签⻚的控件,可以往⾥⾯添加⼀些widget.进⼀步的就可以通过标签⻚来切换
属性 | 说明 |
---|---|
tabPosition | 标签⻚所在的位置. |
currentIndex | 当前选中了第⼏个标签⻚(从0开始计算) |
currentTabText | 当前选中的标签⻚的⽂本 |
currentTabName | 当前选中的标签⻚的名字 |
currentTabIcon | 当前选中的标签⻚的图标 |
currentTabToolTip | 当前选中的标签⻚的提⽰信息 |
tabsCloseable | 标签⻚是否可以关闭 |
movable | 标签⻚是否可以移动 |
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
信号 | 说明 |
---|---|
currentChanged(int) | 在标签⻚发⽣切换时触发,参数为被点击的选项卡编号. |
tabBarClicked(int) | 在点击选项卡的标签条的时候触发.参数为被点击的选项卡编号. |
tabBarDoubleClicked(int) | 在双击选项卡的标签条的时候触发.参数为被点击的选项卡编号. |
tabCloseRequest(int) | 在标签⻚关闭时触发.参数为被关闭的选项卡编号. |
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//先在每个标签页中加一个label
QLabel* label1 = new QLabel(ui->tab);
label1->setText("第一页");
label1->resize(200,400);
QLabel* label2 = new QLabel(ui->tab_2);
label2->setText("第二页");
label2->resize(200,400);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
int count = ui->tabWidget->count();//获取标签页总数
QWidget* w = new QWidget();
ui->tabWidget->addTab(w,QString("第 ")+QString::number(count+1)+QString("页"));
//添加label显示内容
QLabel* label = new QLabel(w);//label在weidget上建立
label->setText(QString("第 ")+QString::number(count+1)+QString("页"));
label->resize(200,400);
//设置新增标签页后,直接在新标签页上
ui->tabWidget->setCurrentIndex(count);
}
void Widget::on_pushButton_2_clicked()
{
int index = ui->tabWidget->currentIndex();
ui->tabWidget->removeTab(index);
}
三、布局管理器
之前使⽤Qt在界⾯上创建的控件,都是通过"绝对定位"的⽅式来设定的.
也就是每个控件所在的位置,都需要计算坐标,最终通过setGeometry 或者move ⽅式摆放过去.
这种设定⽅式其实并不⽅便.尤其是界⾯如果内容⽐较多,不好计算.⽽且⼀个窗⼝⼤⼩往往是可以调整的,按照绝对定位的⽅式,也⽆法⾃适应窗⼝⼤⼩.因此Qt引⼊"布局管理器"(Layout)机制,来解决上述问题.
1. 垂直布局(QVBoxLayout)
使⽤QVBoxLayout 表⽰垂直的布局管理器.
属性 | 说明 |
---|---|
layoutLeftMargin | 左侧边距. |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上⽅边距 |
layoutBottomMargin | 下⽅边距 |
layoutSpacing | 相邻元素之间的间距 |
ui->setupUi(this);
QPushButton* button1 = new QPushButton("按钮1");
QPushButton* button2 = new QPushButton("按钮2");
QPushButton* button3 = new QPushButton("按钮3");
//创建布局管理器
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
//把布局管理器添加到窗口中
this->setLayout(layout);
使用垂直布局管理器,他就会像这样自适应的垂直进行布局,并且布局会根据窗口的大小变化而变化!
但是每个widget中只能设置一个布局管理器。接下来我们看看怎么设置多个布局管理器!
设置多个布局管理器
2. 水平布局(QHBoxLayout,布局管理器嵌套)
使⽤QHBoxLayout 表⽰垂直的布局管理器。
属性 | 说明 |
---|---|
layoutLeftMargin | 左侧边距. |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上⽅边距 |
layoutBottomMargin | 下⽅边距 |
layoutSpacing | 相邻元素之间的间距 |
使用方式和垂直布局一致,这里不再赘述!
※布局管理器还可以进行嵌套,水平嵌套垂直,垂直嵌套水平!
ui->setupUi(this);
//创建垂直布局管理器
QVBoxLayout* vlayout = new QVBoxLayout();
this->setLayout(vlayout);
//添加垂直的三个按钮
QPushButton* button1 = new QPushButton("按钮1");
QPushButton* button2 = new QPushButton("按钮2");
QPushButton* button3 = new QPushButton("按钮3");
vlayout->addWidget(button1);
vlayout->addWidget(button2);
vlayout->addWidget(button3);
//创建水平布局管理器
QHBoxLayout* hlayout = new QHBoxLayout();
//添加水平的两个按钮
QPushButton* button4 = new QPushButton("按钮4");
QPushButton* button5 = new QPushButton("按钮5");
hlayout->addWidget(button4);
hlayout->addWidget(button5);
//把水平布局管理器添加到垂直布局管理器内部
vlayout->addLayout(hlayout);
3. 网格布局(QGridLayout)
Qt 中还提供了QGridLayout ⽤来实现⽹格布局的效果.可以达到M*N的这种⽹格的效果.
整体和QVBoxLayout 以及QHBoxLayout 相似.但是设置spacing的时候是按照垂直⽔平两个⽅向来设置的.
属性 | 说明 |
---|---|
layoutLeftMargin | 左侧边距. |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上⽅边距 |
layoutBottomMargin | 下⽅边距 |
layoutHorizontalSpacing | 相邻元素之间⽔平⽅向的间距 |
layoutVerticalSpacing | 相邻元素之间垂直⽅向的间距 |
layoutRowStretch | ⾏⽅向的拉伸系数 |
layoutColumnStretch | 列⽅向的拉伸系数 |
QPushButton* button1 = new QPushButton("按钮1");
QPushButton* button2 = new QPushButton("按钮2");
QPushButton* button3 = new QPushButton("按钮3");
QPushButton* button4 = new QPushButton("按钮4");
QPushButton* button5 = new QPushButton("按钮5");
QPushButton* button6 = new QPushButton("按钮6");
QGridLayout* layout = new QGridLayout();
layout->addWidget(button1,0,0);//(n,n)布局,(0,0)代表第一行第一列,以此类推
layout->addWidget(button2,1,1);
layout->addWidget(button3,2,2);
layout->addWidget(button4,3,3);
layout->addWidget(button5,4,1);
layout->addWidget(button6,5,5);
//如果你设置的很离谱比如:layout->addWidget(button6,100,100);那么QT也不会无脑那么设置,它会根据相对位置进行合理化
this->setLayout(layout);
拉伸系数
水平拉伸系数:setColumnStretch()第一个参数为第几列,第二个参数为比例,设置为0表示不随窗口变化而变化
//设置水平拉伸系数
layout->setColumnStretch(0,0);//第一个参数为第几列
layout->setColumnStretch(1,1);//第二个参数为比例,设置为0表示不随窗口变化而变化
layout->setColumnStretch(2,3);
垂直拉伸系数:
//设置垂直拉伸系数
layout->setRowStretch(0,1);//第一个参数为第几行
layout->setRowStretch(1,4);//第二个参数为比例,设置为0表示不随窗口变化而变化
我们发现其并没有按照我们的设置进行变化!!
这是为什么呢???
这是因为setSizePolicy
,由于按钮垂直方向默认是没有拉开的(水平方向默认拉伸),因此垂直方向不会受到拉伸系数的影响,要想让垂直方向的拉伸系数生效,就需要让按钮能够拉伸展开!
使⽤setSizePolicy 设置按钮的尺⼨策略.可选的值如下:
QSizePolicy::Ignored 忽略控件的尺⼨,不对布局产⽣影响。
QSizePolicy::Minimum 控件的最⼩尺⼨为固定值,布局时不会超过该值。
QSizePolicy::Maximum :控件的最⼤尺⼨为固定值,布局时不会⼩于该值。
QSizePolicy::Preferred :控件的理想尺⼨为固定值,布局时会尽量接近该值。
QSizePolicy::Expanding 控件的尺⼨可以根据空间调整,尽可能占据更多空间。
QSizePolicy::Shrinking 控件的尺⼨可以根据空间调整,尽可能缩⼩以适应空间。
//使其能够展开
button1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button5->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button6->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
//设置垂直拉伸系数
layout->setRowStretch(0,1);//第一个参数为第几行
layout->setRowStretch(1,4);//第二个参数为比例,设置为0表示不随窗口变化而变化
4. 表单布局(QFormLayout)
除了上述的布局管理器之外,Qt还提供了QFormLayout,属于是QGridLayout 的特殊情况,专⻔⽤于实现两列表单的布局.
这种表单布局多用于让用户填写信息的场景,左侧列为提示,右侧列为输入框。
其是一个N行2列的表格!
QFormLayout* layout = new QFormLayout();
this->setLayout(layout);
//创建label为第一列
QLabel* label1 = new QLabel("学校");
QLabel* label2 = new QLabel("学院");
QLabel* label3 = new QLabel("专业");
//创建输入框为第二列
QLineEdit* edit1 = new QLineEdit();
QLineEdit* edit2 = new QLineEdit();
QLineEdit* edit3 = new QLineEdit();
//把上述控件添加到表单布局
layout->addRow(label1,edit1);
layout->addRow(label2,edit2);
layout->addRow(label3,edit3);
5. 空白(Spacer)
使⽤布局管理器的时候,可能需要在控件之间,添加⼀段空⽩.就可以使⽤QSpacerItem来表⽰.
属性 | 说明 |
---|---|
width | 宽度. |
height | ⾼度 |
hData | ⽔平⽅向的sizePolicy |
vData | 垂直⽅向的sizePolicy |
QHBoxLayout* layout = new QHBoxLayout();
this->setLayout(layout);
//创建label为第一列
QLabel* label1 = new QLabel("学校");
QLabel* label2 = new QLabel("学院");
QLabel* label3 = new QLabel("专业");
//创建spacer
QSpacerItem* SPACER = new QSpacerItem(200,20);
//把上述控件添加到表单布局
layout->addWidget(label1);
layout->addSpacerItem(SPACER);
layout->addWidget(label2);
layout->addWidget(label3);
同时其也可以在ui界面中直接添加: