Qt——常用控件
前言:本篇文章,将分享Qt中常用的,具有代表性的一些控件。
一.按钮类控件
在前边的文章中我们也多次分享过PushButton按钮,但Qt中并非只提供这一种按钮。
在Qt中,QPushButton并非直接继承自QWidget,QAbstractButton才是它的父类,这个父类是一个抽象类,继承自QWidget。
还有另外几个按钮控件,和QPushButton一样,都继承自QAbstractButton,所以说,QAbstractButton包含了这些按钮控件的公共属性的方法。
1.QPushButton
QPushButton的常见属性:
text :按钮中的文本
icon :按钮中的图标
iconSize :按钮中图标的尺寸
shortCut :按钮对应的快捷键
autoRepeat :按钮是否会重复触发. 当鼠标左键按住不放时, 如果设为 true, 则会持续产生鼠标点击事件; 如果设为 false, 则必须释放鼠标, 再次按下鼠标时才能产生点击事件. (相当于枪战游戏中枪的连射还是单射)
autoRepeatDelay :重复触发的延时时间. 按住按钮多久之后, 开始重复触发.
autoRepeatInterval :重复触发的周期.
2.QRadioButton
QRadioButton 是单选按钮. 可以让我们在多个选项中选择⼀个。
常见属性:
checkable :是否能选中。
checked :是否已经被选中. checkable 是 checked 的前提条件。
autoExclusive :是否排他. 选中⼀个按钮之后是否会取消其他按钮的选中. 对于QRadioButton 来说默认就是排他的。
所谓排他性,就是当存在多个单选按钮时,选中一个按钮之后,就会取消其他按钮的选中状态。
比如说当我选中春天时,再去选中夏天,就会自动取消春天的选中状态。
当然,上述单选按钮还存在一个问题,当同一个界面上出现多个单选按钮,我们希望这些按钮之间分为几个组合,组合与组合之间互不影响。此时因为整体的排他性,我们无法实现不同组的按钮之间不会存在排他性。
为了解决这一问题,Qt设计了QButtonGroup类,可以针对按钮进行真正的分组。
使用QButtonGroup类,需要包含同名头文件:
// 创建两个个 QButtonGroup
QButtonGroup* group1 = new QButtonGroup(this);
QButtonGroup* group2 = new QButtonGroup(this);
// 把 QRadioButton 两两⼀组, 放到两个个 QButtonGroup 中.
group1->addButton(ui->radioButton);
group1->addButton(ui->radioButton_2);
group2->addButton(ui->radioButton_3);
group2->addButton(ui->radioButton_4);
分组之后,不同组的按钮之间就不会存在排他性了。
3.QCheckBox
QCheckBox 表示复选按钮. 可以允许选中多个。
QCheckBox 最相关的属性也是 checkable 和 checked,这里就不继续介绍。
二.显示类控件
1.QLabel
QLabel 可以用来显示文本和图片。
常见属性:
text :QLabel 中的文本
textFormat :文本的格式.
- Qt::PlainText :纯文本
- Qt::RichText :富文本(支持 html 标签)
- Qt::MarkdownText :markdown 格式,提供各种特殊符号,表示不同的样式/格式
- Qt::AutoText :根据文本内容自动决定文本格式.
pixmap:QLabel 内部包含的图片.
scaledContents :设为 true 表示内容自动拉伸填充 QLabel,设为 false 则不会自动拉伸
alignment :对齐方式. 可以设置水平和垂直方向如何对齐.
wordWrap :设为 true 内部的文本会自动换行. 设为 false 则内部文本不会自动换行.
indent :设置文本缩进. 水平和垂直方向都生效.
margin :内部文本和边框之间的边距. 不同于 indent, 但是是上下左右四个方向都同时有效. 而 indent 最多只是两个方向有效(具体哪两个方向有效取决于 alignment )
openExternalLinks :是否允许打开⼀个外部的链接. (当 QLabel 文本内容包含 url 的时候涉及到)
buddy :给 QLabel 关联⼀个 "伙伴" , 这样点击 QLabel 时就能激活对应的伙伴. 例如伙伴如果是⼀个 QCheckBox, 那么该 QCheckBox 就会被选中.
2.QLCDNumber
QLCDNumber是⼀个专门用来显示数字的控件. 类似于 "老式计算器" 的效果。
常见属性:
intValue :QLCDNumber 显示的数字值(int).value :QLCDNumber 显示的数字值(double). 和 intValue 是联动的. 例如给 value 设为 1.5, intValue 的值就是 2. 另外, 设置 value 和 intValue 的方法名字为 display , 而不是 setValue 或 者 setIntValue .digitCount :显示几位数字.mode :数字显示形式.
- QLCDNumber::Dec :十进制模式,显示常规的十进制数字。
- QLCDNumber::Hex :十六进制模式,以十六进制格式显示数字。
- QLCDNumber::Bin :二进制模式,以二进制格式显示数字。
- QLCDNumber::Oct :八进制模式,以八进制格式显示数字。
segmentStyle :设置显示风格.
- QLCDNumber::Flat :平面的显示风格,数字呈现在⼀个平坦的表面上。
- QLCDNumber::Outline :轮廓显示风格,数字具有清晰的轮廓和阴影效果。
- QLCDNumber::Filled :填充显示风格,数字被填充颜色并与背景区分开。
smallDecimalPoint :设置比较小的小数点.
3.QProgressBar
使用QProgressBar 表示⼀个进度条。
相关属性:
minimum :进度条最小值maximum :进度条最大值value :进度条当前值alignment :文本在进度条中的对齐方式.
- Qt::AlignLeft : 左对齐
- Qt::AlignRight : 右对齐
- Qt::AlignCenter : 居中对齐
- Qt::AlignJustify : 两端对齐
textVisible :进度条的数字是否可见.orientation :进度条的方向是水平还是垂直invertAppearance :是否是朝反方向增长进度textDirection :文本的朝向.format :展示的数字格式.
- %p :表示进度的百分比(0-100)
- %v :表示进度的数值(0-100)
- %m :表示剩余时间(以毫秒为单位)
- %t :表示总时间(以毫秒为单位)
4.QCalendarWidget
QCalendarWidget 表示一个 "日历"。
相关属性:
selectDate :当前选中的日期
minimumDate :最小日期
maximumDate :最大日期
firstDayOfWeek :每周的第⼀天(也就是日历的第⼀列) 是周几.
gridVisible :是否显示表格的边框
selectionMode :是否允许选择日期
navigationBarVisible :日历上方标题是否显示
horizontalHeaderFormat :日历上方标题显示的日期格式
verticalHeaderFormat :日历第⼀列显示的内容格式
dateEditEnabled :是否允许日期被编辑
重要信号:
selectionChanged(const QDate&);
当选中的日期发生改变时发出
activated(const QDate&) ;
当双击⼀个有效的日期或者按下回车键时发出,形参是⼀个QDate类型,保存了选中的日期
currentPageChanged(int, int) ;
当年份月份改变时发出,形参表示改变后的新年份和月份
三.输入类控件
1.QLineEdit
QLineEdit 用来表示单行输入框. 可以输入一段文本, 但是不能换行。
常见属性:
text :输入框中的文本
inputMask :输入内容格式约束
maxLength :最大长度
frame :是否添加边框
echoMode :显示方式.
QLineEdit::Normal :这是默认值,文本框会显示输入的文本
QLineEdit::Password :在这种模式下,输入的字符会被隐藏,通常用星号(*)或等号(=)代替。
QLineEdit::NoEcho :在这种模式下,文本框不会显示任何输入的字符。
cursorPosition :光标所在位置
alignment :文字对齐方式, 设置水平和垂直方向的对齐.
dragEnabled :是否允许拖拽
readOnly :是否是只读的(不允许修改)
placeHolderText :当输入框内容为空的时候, 显示什么样的提示信息
clearButtonEnabled :是否会自动显示出 "清除按钮"
核心信号:
void cursorPositionChanged(int old, int new);
当⿏标移动时发出此信号,old为先前的位置,new为新位置。
void editingFinished();
当按返回或者回车键时,或者行编辑失去焦点时,发出此信号。
void returnPressed();
当返回或回车键按下时发出此信号. 如果设置了验证器, 必须要验证通过, 才能触发.
void selectionChanged();
当选中的文本改变时,发出此信号。
void textChanged(const QString &text);
当QLineEdit中的文本改变时,发出此信号,text是新的文本。代码对文本的修改能够触发这个信号.
void textEdited(const QString &text));
当QLineEdit中的文本改变时,发出此信号,text是新的文本。 代码对文本的修改不能触发这个信号
2.QtextEdit
QTextEdit 表示多行输入框. 也是⼀个富文本 & markdown 编辑器. 并且能在内容超出编辑框范围时自动提供滚动条。
常见属性:
markdown :输入框内持有的内容. ⽀持 markdown 格式. 能够自动的对markdown 文本进行
渲染成 html
html :输入框内持有的内容. 可以支持大部分 html 标签. 包括 img 和 table 等.
placeHolderText :输入框为空时提示的内容.
readOnly :是否是只读的
undoRedoEnable :是否开启 undo/redo功能. 按下ctrl + z触发 undo。ctrl + y 触发 redo
autoFormating :开启自动格式化.
tabstopWidth :按下缩进占多少空间
overwriteMode :是否开启覆盖写模式
acceptRichText :是否接收富文本内容
verticalScrollBarPolicy :垂直方向滚动条的出现策略
Qt::ScrollBarAsNeeded : 根据内容自动决定是否需要滚动条。这是默认值。
Qt::ScrollBarAlwaysOff : 总是关闭滚动条。
Qt::ScrollBarAlwaysOn : 总是显示滚动条。
horizontalScrollBarPolicy :水平方向滚动条的出现策略
Qt::ScrollBarAsNeeded : 根据内容自动决定是否需要滚动条。这是默认值。
Qt::ScrollBarAlwaysOff : 总是关闭滚动条。
Qt::ScrollBarAlwaysOn : 总是显示滚动条。
重要信号:
textChanged();
文本内容改变时触发
selectionChanged();
选中范围改变时触发
cursorPositionChanged();
光标移动时触发
undoAvailable(bool);
可以进行 undo 操作时触发
redoAvailable(bool);
可以进行 redo 操作时触发
copyAvaiable(bool);
文本被选中/取消选中时触发
3.QComboBox
QComboBox 表示下拉框。
常见属性:
currentText :当前选中的文本
currentIndex :当前选中的条目下标. 从 0 开始计算. 如果当前没有条目被选中, 值为 -1
editable :是否允许修改 设为 true 时, QComboBox 的行为就非常接近 QLineEdit , 也可以
设置 validator
iconSize :下拉框图标 (小三角) 的大小
maxCount :最多允许有多少个条目
常用方法:
addItem(const QString&);
添加⼀个条目
currentIndex();
获取当前条目的下标从 0 开始计算. 如果当前没有条目被选中, 值为 -1
currentText();
获取当前条目的文本内容
重要信号:
activated(int);
当用户选择了⼀个选项时发出.
activated(const QString & text);
这个时候相当于用户点开下拉框, 并且鼠标划过某个选项.此时还没有确认做出选择.
currentIndexChanged(int);
当前选项改变时发出.
currentIndexChanged(const QString& text);
此时用户已经明确的选择了⼀个选项. 用户操作或者通过程序操作都会触发这个信号.
editTextChanged(const QString &text)
当编辑框中的文本改变时发出(editable 为 true 时有效)
4.QSpinBox
使用QSpinBox 或者 QDoubleSpinBox 表示 "微调框", 它是带有按钮的输入框. 可以用来输入整
数/浮点数. 通过点击按钮来修改数值大小。
value :存储的数值.singleStep :每次调整的 "步长". 按下一次按钮数据变化多少.displayInteger :数字的进制. 例如 displayInteger 设为 10, 则是按照 10 进制表⽰. 设为 2 则为 2进制表示.minimum :最小值maximum :最大值suffix :后缀prefix :前缀wrapping :是否允许换行frame :是否带边框alignment :文字对齐方式.readOnly :是否允许修改buttonSymbol :按钮上的图标.
- UpDownArrows 上下箭头形式
- PlusMinus 加减号形式
- NoButtons 没有按钮
accelerated (加速的) :按下按钮时是否为快速调整模式。correctionMode :输入有误时如何修正。
- QAbstractSpinBox::CorrectToPreviousValue : 如果用户输入了一个无效的值(例如,在只能显示正整数的SpinBox中输入了负数),那么SpinBox会恢复为上一个有效值。例如,如果SpinBox的初始值是1,用户输入了-1(无效),然后SpinBox会恢复为1。
- QAbstractSpinBox::CorrectToNearestValue : 如果用户输入了一个无效的值,SpinBox会恢复为最接近的有效值。例如,如果SpinBox的初始值是1,用户输入了-1(无效),那么SpinBox会恢复为0。
keyboardTrack :是否开启键盘跟踪。
- 设为 true, 每次在输入框输入⼀个数字, 都会触发一次 valueChanged() 和textChanged() 信号.
- 设为 false, 只有在最终按下 enter 或者输入框失去焦点, 才会触发valueChanged() 和textChanged() 信号
重要信号:
textChanged(QString);微调框的文本发生改变时会触发. 参数 QString 带有 前缀 和 后缀.valueChanged(int);微调框的文本发生改变时会触发. 参数 int, 表示当前的数值.
5.QDateTimeEdit
QDateTimeEdit 表示时间日期的微调框。
常见属性:
dateTime :时间日期的值. 形如 2000/1/1 0:00:00
date :单纯日期的值. 形如 2001/1/1
time :单纯时间的值. 形如 0:00:00
displayFormat :时间日期格式. 形如 yyyy/M/d H:mm
y 表示年份
M 表示月份
d 表示日期
H 表示小时
m 表示分钟
s 表示秒
注意: 这里的格式化符号的含义, 不要记忆. 不同语言/库的设定规则是存在差异的. ⼀定是用的时候再去查.
minimumDateTime :最小时间日期
maximumDateTime :最大时间日期
timeSpec
Qt::LocalTime :显示本地时间。
Qt::UTC :显示协调世界时(UTC)。
Qt::OffsetFromUTC :显示相对于UTC的偏移量(时差).
常用方法:
daysTo 函数可以计算两个日期的天数.
secsTo 函数可以计算两个时间的秒数.
重要信号:
dateChanged(QDate);
日期改变时触发.
timeChanged(QTime);
时间改变时触发.
dateTimeChanged(QDateTime);
时间日期任意一个改变时触发。
6.QDial
QDial 表示一个旋钮。
相关属性:
value :持有的数值.
minimum :最小值
maximum :最大值
singleStep :按下方向键的时候改变的步长.
pageStep :按下 pageUp / pageDown 的时候改变的步长.
sliderPosition :界面上旋钮显示的 初始位置
tracking :外观是否会跟踪数值变化. 默认值为 true. ⼀般不需要修改.
wrapping :是否允许循环调整. 即数值如果超过最大值, 是否允许回到最小值. (调整过程能否 "套圈")
notchesVisible :是否显示刻度线
notchTarget :刻度线之间的相对位置. 数字越大, 刻度线越稀疏.
重要信号:
valueChanged(int);数值改变时触发
rangeChanged(int, int);范围变化时触发
7.QSlider
QSlider 表示一个滑动条,有垂直水平两种。
常见属性:
value :持有的数值.
minimum :最小值
maximum :最大值
singleStep :按下方向键的时候改变的步长.
pageStep :按下 pageUp / pageDown 的时候改变的步长.
sliderPosition :滑动条显示的 初始位置
tracking :外观是否会跟踪数值变化. 默认值为 true. ⼀般不需要修改.
orientation :滑动条的方向是水平还是垂直
invertedAppearance :是否要翻转滑动条的方向
tickPosition :刻度的位置.
tickInterval :刻度的密集程度.
重要信号:
valueChanged(int) ;数值改变时触发
rangeChanged(int, int) ;范围变化时触发
四.多元素控件
1.QListWidget
使用 QListWidget 能够显示一个纵向的列表。
currentRow :当前被选中的是第几行
count: 一共有多少行
sortingEnabled: 是否允许排序
isWrapping: 是否允许换行
itemAlignment: 元素的对齐方式
selectRectVisible: 被选中的元素矩形是否可见
spacing: 元素之间的间隔
重要方法:
addItem(const QString& label);
addItem(QListWidgetItem *item);
列表中添加元素.
currentItem();
返回 QListWidgetItem* 表示当前选中的元素
setCurrentItem(QListWidgetItem* item);
设置选中哪个元素
setCurrentRow(int row);
设置选中第几行的元素
insertItem(const QString& label, int row);
insertItem(QListWidgetItem *item, int row);
在指定的位置插入元素
item(int row);
返回 QListWidgetItem* 表示第 row 行的元素
takeItem(int row);
删除指定行的元素, 返回 QListWidgetItem* 表示是哪个元素被删除了
currentItemChanged(QListWidgetItem* current, QListWidgetItem* old);
选中不同元素时会触发. 参数是当前选中的元素和之前选中的元素.
currentRowChanged(int);
选中不同元素时会触发. 参数是当前选中元素的⾏数.
itemClicked(QListWidgetItem* item);
点击某个元素时触发
itemDoubleClicked(QListWidgetItem* item);
双击某个元素时触发
itemEntered(QListWidgetItem* item);
⿏标进⼊元素时触发
其中QListWidgetItem 这个类表示 QListWidget 中的一个元素,其重要方法如下:
setFont :设置字体
setIcon :设置图标
setHidden :设置隐藏
setSizeHint: 设置尺寸
setSelected :设置是否选中
setText: 设置文本
setTextAlignment :设置文本对齐方式.
2.QTableWidget
使用 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(int row);在第 row 行处插入新行
insertColumn(int column);在第 column 列插入新列
removeRow(int row);删除第 row 行
removeColumn(int column);删除第 column 列
setHorizontalHeaderItem(int column, QTableWidget*);设置指定列的表头
setVerticalHeaderItem(int row, QTableWidget*);设置指定行的表头
重要信号:
cellClicked(int row, int column) ;点击单元格时触发
cellDoubleClicked(int row, int column) ;双击单元格时触发
cellEntered(int row, int column) ;鼠标进入单元格时触发
currentCellChanged(int row, int column, int previousRow, int previousColumn);
选中不同单元格时触发
QTableWidgetItem 重要方法:
row() :获取当前是第几行
column() :获取当前是第几列
setText(const QString&) :设置文本
setTextAlignment(int) :设置文本对齐
setIcon(const QIcon&) :设置图标
setSelected(bool) :设置被选中
setSizeHints(const QSize&) :设置尺寸
setFont(const QFont&) :设置字体
3.QTreeWidget
QTreeWidget 表示一个树形控件. 里面的每个元素, 都是一个QTreeWidgetItem , QTreeWidgetItem 可以包含多个文本和图标, 每个文本/图标为⼀个列.
QTreeWidget树形结构,没有体现出根节点,而是从根节点的下一层子节点开始计算。
重要方法:
clear(); 清空所有子节点
addTopLevelItem(QTreeWidgetItem* item) ;新增顶层节点
topLevelItem(int index) ;获取指定下标的顶层节点.
topLevelItemCount() ;获取顶层节点个数
indexOfTopLevelItem(QTreeWidgetItem* item) ;查询指定节点是顶层节点中的下标
takeTopLevelItem(int index) ;删除指定的顶层节点. 返回 QTreeWidgetItem* 表示被删除
的元素
currentItem() ;获取到当前选中的节点, 返回 QTreeWidgetItem*
setCurrentItem(QTreeWidgetItem* item) ;选中指定节点
setExpanded(bool) ;展开/关闭节点
setHeaderLabel(const QString& text); 设置 TreeWidget 的 header 名称
重要信号:
currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* old) ;切换选中元素时触发
itemClicked(QTreeWidgetItem* item, int col) ;点击元素时触发
itemDoubleClicked(QTreeWidgetItem* item, int col) ;双击元素时触发
itemEntered(QTreeWidgetItem* item, int col) ;鼠标进入时触发
itemExpanded(QTreeWidgetItem* item) ;元素被展开时触发
itemCollapsend(QTreeWidgetItem* item) ;元素被折叠时触发
QTreeWidgetItem相关属性:
text :持有的文本
textAlignment :文本对齐方式
icon :持有的图表
font :文本字体
hidden :是否隐藏
disabled :是否禁用
expand :是否展开
sizeHint :尺寸大小
selected :是否选中
QTreeWidgetItem重要方法:
addChild(QTreeWidgetItem* child) ;新增子节点
childCount() ;子节点的个数
child(int index);获取指定下标的子节点. 返回 QTreeWidgetItem*
takeChild(int index) ;删除对应下标的子节点
removeChild(QTreeWidgetItem* child) ;删除对应的子节点
parent() ;获取该元素的父节点
五.容器类控件
1.QGroupBox
QGroupBox 实现⼀个带有标题的分组框. 可以把其他的控件放到里面作为⼀组。
常见属性:
title :分组框的标题
alignment :分组框内部内容的对齐式
flat :是否是 "扁平" 模式
checkable :是否可选择. 设为 true, 则在 title 前方会多出一个可勾选的部分.
checked: 描述分组框的选择状态 (前提是 checkable 为 true)
2.TabWidget
QTabWidget 实现一个带有标签页的控件, 可以往里面添加一些 widget. 进⼀步的就可以通过标签页来切换.
相关属性:
tabPosition :标签页所在的位置.
North 上方
South 下方
West 左侧
East 右侧
currentIndex :当前选中了第几个标签页 (从 0 开始计算)
currentTabText :当前选中的标签页的文本
currentTabName :当前选中的标签页的名字
currentTabIcon :当前选中的标签页的图标
currentTabToolTip :当前选中的标签页的提示信息
tabsCloseable :标签页是否可以关闭
movable :标签页是否可以移动
重要信号:
currentChanged(int) ;在标签页发生切换时触发, 参数为被点击的选项卡编号.
tabBarClicked(int) ;在点击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.
tabBarDoubleClicked(int) ;在双击选项卡的标签条时候触发. 参数为被点击的选项卡编号.
tabCloseRequest(int) ;在标签页关闭时触发. 参数为被关闭的选项卡编号。
六.布局管理器
在我们前边所使用控件时,都是手动的将控件拖至界面上进行排布,这种做法不仅麻烦,而且对于控件的大小控制不均,更重要的是无法对窗口大小进行自适应。
因此Qt中提供了多种布局管理器,来方便我们进行控件的布局操作。
1.垂直布局
QVBoxLayout 表示垂直的布局管理器. V 是 vertical 的缩写。
将按钮拖入布局管理器后会自动进行规范布局。
相关属性:
layoutLeftMargin :左侧边距
layoutRightMargin: 右侧边距
layoutTopMargin :上方边距
layoutBottomMargin :下方边距
layoutSpacing :相邻元素之间的间距
下面使用代码方式来实现垂直布局管理器来管理三个按钮:
//创建按钮
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);
结果如下:
能够看出,三个按钮非常规范的垂直排布,并且当改变界面大小所,按钮大小也会跟着改变。
2.水平布局
QHBoxLayout 表示水平的布局管理器. H 是 horizontal 的缩写.
相关属性与垂直布局一致,这里就不重复分享。
布局管理器之间还可以嵌套使用:
3.网格布局
QGridLayout 用来实现网格布局的效果. 可以达到 M * N 的这种网格的效果。
相关属性:
layoutLeftMargin :左侧边距
layoutRightMargin :右侧边距
layoutTopMargin :上方边距
layoutBottomMargin :下方边距
layoutHorizontalSpacing :相邻元素之间水平方向的间距
layoutVerticalSpacing:相邻元素之间垂直方向的间距
layoutRowStretch :行方向的拉伸系数
layoutColumnStretch :列方向的拉伸系数
4.表单布局
QFormLayout ,是 QGridLayout 的特殊情况, 专门用于实现两列表单的布局。
这种表单布局多用于让用户填写信息的场景. 左侧列为提示, 右侧列为输入框。
下面利用代码制作一个填写个人信息的简易表单:
QLabel* label1 = new QLabel("姓名");
QLabel* label2 = new QLabel("性别");
QLabel* label3 = new QLabel("年龄");
QLineEdit* lineEdit1 = new QLineEdit();
QLineEdit* lineEdit2 = new QLineEdit();
QLineEdit* lineEdit3 = new QLineEdit();
QFormLayout* layout = new QFormLayout();
layout->addRow(label1,lineEdit1);
layout->addRow(label2,lineEdit2);
layout->addRow(label3,lineEdit3);
this->setLayout(layout);
结果如下:
5.Spacer
使用布局管理器的时候, 可能需要在控件之间, 添加⼀段空白. 就可以使用 QSpacerItem 来表示。
相关属性:
width :宽度
height: 高度
hData :水平方向的 sizePolicy
- QSizePolicy::Ignored : 忽略控件的尺寸,不对布局产⽣影响。
- QSizePolicy::Minimum : 控件的最小尺寸为固定值,布局时不会超过该值。
- QSizePolicy::Maximum : 控件的最大尺寸为固定值,布局时不会小于该值。
- QSizePolicy::Preferred : 控件的理想尺寸为固定值,布局时会尽量接近该值。
- QSizePolicy::Expanding : 控件的尺寸可以根据空间调整,尽可能占据更多空间。
- QSizePolicy::Shrinking : 控件的尺寸可以根据空间调整,尽可能缩小以适应空间
vData: 垂直方向的 sizePolicy,选项同上.