Qt——常用控件

embedded/2024/11/13 11:36:56/

前言:本篇文章,将分享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类,需要包含同名头文件

// 创建两个个 QButtonGroupQButtonGroup* 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 :根据文本内容自动决定文本格式.

pixmapQLabel 内部包含的图片.

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 :数字显示形式.
  1. QLCDNumber::Dec :十进制模式,显示常规的十进制数字。
  2. QLCDNumber::Hex :十六进制模式,以十六进制格式显示数字。
  3. QLCDNumber::Bin :二进制模式,以二进制格式显示数字。
  4. QLCDNumber::Oct :八进制模式,以八进制格式显示数字。
segmentStyle :设置显示风格.
  1. QLCDNumber::Flat :平面的显示风格,数字呈现在⼀个平坦的表面上。
  2. QLCDNumber::Outline :轮廓显示风格,数字具有清晰的轮廓和阴影效果。
  3. 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.表单布局

QFormLayoutQGridLayout 的特殊情况, 专门用于实现两列表单的布局。

这种表单布局多用于让用户填写信息的场景. 左侧列为提示, 右侧列为输入框。

下面利用代码制作一个填写个人信息的简易表单:

    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,选项同上.



http://www.ppmy.cn/embedded/136657.html

相关文章

高性能分布式缓存Redis-分布式锁与布隆过滤器

一、分布式锁 我们先来看一下本地锁 在并发编程中&#xff0c;我们通过锁&#xff0c;来避免由于竞争而造成的数据不一致问题。通常&#xff0c;我们以 synchronized 、Lock 来使用它&#xff08;单机情况&#xff09; 来看这段代码 Autowired RedisTemplate<String,Str…

《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项

《TCP/IP网络编程》学习笔记 | Chapter 9&#xff1a;套接字的多种可选项 《TCP/IP网络编程》学习笔记 | Chapter 9&#xff1a;套接字的多种可选项套接字可选项和 I/O 缓冲大小套接字多种可选项getsockopt & setsockoptSO_SNDBUF & SO_RCVBUF SO_REUSEADDR发生地址绑定…

小新学习k8s第四天之发布管理

一、金丝雀发布&#xff08;灰度发布&#xff09; Deployment控制器支持自定义控制更新过程中的滚动节奏&#xff0c;如“暂停(pause)”或“继续(resume)”更新操作。 ①比如等待第一批新的Pod资源创建完成后立即暂停更新过程&#xff0c;此时&#xff0c;仅存在一部分新版本的…

vue实现websocket实时短消息通知

1、原理 websocket就是通过服务器向客户端推送消息&#xff0c;客户端也可以主动向服务器发送消息&#xff0c;是真正的双向平等对话&#xff0c;是一种长连接&#xff0c;只需要通过一次请求进行初始化。 2、事件 onopen: 客户端和服务器建立连接后触发&#xff0c;被称为客…

【论文速读】| PathSeeker:使用基于强化学习的越狱攻击方法探索大语言模型的安全漏洞

基本信息 原文标题: PathSeeker: Exploring LLM Security Vulnerabilities with a Reinforcement Learning-Based Jailbreak Approach 原文作者: Zhihao Lin, Wei Ma, Mingyi Zhou, Yanjie Zhao, Haoyu Wang, Yang Liu, Jun Wang, Li Li 作者单位: Beihang University, Nany…

【LeetCode】【算法】155. 最小栈

LeetCode 155. 最小栈 题目描述 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int …

钉钉调试微应用整理2

第一步 新建应用 钉钉开放平台](https://open-dev.dingtalk.com/) 去新增应用 第二步 配置应用信息 把本地代码运行起来&#xff0c;并设置本地地址 第三步 在本地代码添加调试命令 这里有2中添加方式 哪一种都可以 方式一&#xff1a; index.html页面中 <!DOCTYPE h…

【架构设计常见技术】

EJB EJB是服务器端的组件模型&#xff0c;使开发者能够构建可扩展、分布式的业务逻辑组件。这些组件运行在EJB容器中&#xff0c;EJB将各功能模块封装成独立的组件&#xff0c;能够被不同的客户端应用程序调用&#xff0c;简化开发过程&#xff0c;支持分布式应用开发。 IOC …