Qt控件核心属性全解析
控件概述
Widget是Qt中的核心概念。英文是“小部件”,这里可以翻译成“控件”。控件是构成一个图形化界面的基本元素。
像按钮、列表视图、树形视图、输入框、滚动条等都属于控件。
Qt作为一个成熟的GUI开发框架,内置了大量的常用控件,并且Qt也提供了“自定义控件”的能力,可以让程序员在现有控件不能满足要求的情况下,对现有的控件做出扩展。
关于控件体系的发展
控件是GUI开发中的通用概念,不仅仅局限于Qt中。
QWidget核心属性

核心属性概览
- Qt::NoFocus:控件不参与焦点管理,无法通过键盘和鼠标获取焦点
- Qt::TalFocus:控件可以通过Tal键来获取焦点
- Qt::ClickFocus:控件通过鼠标点击来获取焦点
- Qt::StrongFocus:控件可以通过键盘和鼠标来获取焦点
- Qt::WheelFocus:控件可以通过鼠标滚动来获取焦点
contextMenuPolicy:上下文菜单的显示策略
- Qt::DefaultContextMenu:默认的上下文菜单策略,用户可以通过鼠标右键或键盘快捷键触发上下文菜单
- Qt::NoContextMenu:禁用上下文菜单,即使用户点击鼠标右键也不会显示菜单
- Qt::PreventContextMenu:防止控件希纳是上下文菜单,即使用户点击鼠标右键也不会显示菜单
- Qt::ActionsContextMenu:将上下文菜单替换成控件的“动作”菜单,用户可以通过鼠标右键或键盘快捷键触发这个菜单
- Qt::CustomContextMenu:通过自定义的上下文菜单,用户可以通过鼠标右键或键盘快捷键触发这个菜单
locale:设置语言和国家地区
- Qt::LeftToRight:文本从左向右排列,也是默认值
- Qt::RightToLeft:文本从右向左排列
- Qt::GlobalAtomics:部件的布局方式由全局原子性决定(其实就是根据应用程序中的其他widget布局方向确定)
autoFillBackground:是否⾃动填充背景颜⾊.
windowFilePath:能够把 widget 和⼀个本地⽂件路径关联起来. PS: 其实作⽤不⼤.
enabled
API | 说明 |
isEnabled() | 获取到控件的可用状态 |
setEbalbed | 设置控件是否可用,true表示可用,false表示禁用 |
举例:
有两个按钮,按钮2可以改变按钮1的禁用状态
geometry
位置和尺寸,其实就是四个属性的统称
- x横坐标
- y纵坐标
- width宽度
- height高度
但是在实际开发中,我们并不会直接使用这几个属性,而是通过一系列封装的方法来获取/修改
API | 说明 |
geometry() | 获取到控件的位置和尺寸。返回结果是一个QRect,包含了x,y,width,height。其中x,y是左上角的坐标 |
setGeometry(QRect) setGeometry(int x,int y,int width,int height) | 设置控件的位置和尺寸,可以直接设置一个QRect,也可以分成四个属性单独设置 |
当然如果一个不是作为窗口的widget,上述来个那种方式得到的结果是一致的
x() | 获取横坐标 计算时包含window frame |
y() | 获取纵坐标 计算时包含window frame |
pos() | 返回 QPoint 对象, ⾥⾯包含 x(), y(), setX(), setY() 等⽅法. 计算时包含 window frame |
frameSize() | 返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法. 计算时包含 window frame |
frameGeometry() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y, width, size. 计算时包含 window frame 对象 |
width() | 获取宽度 计算时不包含 window frame |
height() | 获取高度 计算时不包含 window frame |
size() | 返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法. 计算时不包含 window frame |
rect() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取并设置 x, y, width, size. 计算时不包含 window frame 对象 |
geometry() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y, width, size. 计算时不包含 window frame 对象 |
setGeometry() | 直接设置窗⼝的位置和尺⼨. 可以设置 x, y, width, height, 或者 QRect 对象. 计算时不包含 window frame 对象 |
示例,感受geometry和frameGeometry的区别
windowTitle
API | 说明 |
windowTitle() | 获取到控件的窗口标题 |
setWindowTitle(const QString& title) | 设置控件的窗口标题 |
注意
如果是顶层的widget(独立窗口),这个操作才会有效;否则,这个操作没有任何效果
windowIcon
API | 说明 |
windowIcon() | 获取到控件的窗⼝图标. 返回 QIcon 对象. |
setWindowIcon(const QIcon& icon | 设置控件的窗⼝图标. |

- 使⽤ : 作为开头, 表⽰从 qrc 中读取资源.
- / 表示配置的前缀
- cat.png是资源的名称
windowOpacity
AP | 说明 |
windowOpacity() | 获取到控件的不透明数值. 返回 float, 取值为 0.0 -> 1.0 其中 0.0 表⽰全透明, 1.0 表⽰完全不透明. |
setWindowOpacity(flo at n) | 设置控件的不透明数值. |
举例:
设计两个按钮,一个用来增加透明度,一个用来减少透明度
cursor
API | 说明 |
cursor() | 获取到当前 widget 的 cursor 属性, 返回 QCursor 对象. 当⿏标悬停在该 widget 上时, 就会显⽰出对应的形状. |
setCursor(const QCursor& cursor) | 设置该 widget 光标的形状. 仅在⿏标停留在该 widget 上时⽣效. |
QGuiApplication::setOverrideCursor(co nst QCursor& cursor | 设置全局光标的形状. 对整个程序中的所有 widget 都会⽣效. 覆盖 上⾯的 setCursor 设置的内容. |
实现一下,当鼠标悬浮在按钮上时,处于等待状态:
鼠标效果无法截屏,自行尝试
使用代码来实现一下
可以来实现一下,把我们的鼠标变成篮球
font
API | 说明 |
font() | 获取当前 widget 的字体信息. 返回 QFont 对象 |
setFont(const QFont& font) | 设置当前 widget 的字体信息 |
关于QFont
属性 | 说明 |
family | 字体家族. ⽐如 "楷体", "宋体", "微软雅⿊" 等. |
pointSize | 字体⼤⼩ |
weight | 字体粗细. 以数值⽅式表⽰粗细程度取值范围为 [0, 99], 数值越⼤, 越 粗 |
bold | 是否加粗. 设置为 true, 相当于 weight 为 75. 设置为 false 相当于 weight 为 50. |
italic | 是否倾斜 |
underline | 是否带有下划线 |
strikeOut | 是否带有删除线 |
toolTip
API | 说明 |
setToolTip | 设置 toolTip. ⿏标悬停在该 widget 上时会有提⽰说明. |
setToolTipDuring | 设置 toolTip 提⽰的时间. 单位 ms. 时间到后 toolTip ⾃动消失. |

focusPolicy
设置控件获取到焦点的策略. ⽐如某个控件能否⽤⿏标选中或者能否通过 tab 键选中。
API | 说明 |
focusPolicy() | 获取该 widget 的 focusPolicy, 返回 Qt::FocusPolicy |
setFocusPolicy(Qt::FocusPolicy policy ) | 设置 widget 的 focusPolicy. |
- Qt::NoFocus :控件不会接收键盘焦点
- Qt::TabFocus:控件可以通过Tab键接收焦点
- Qt:ClickFocus:控件在鼠标点击时接收焦点
- Qt::StrongFocus:控件可以通过Tab键和鼠标点击接收焦点(默认值)
- Qt::WheelFocus:类似Qt::StrongFocus,同时控件也通过鼠标滚到获取焦点

styleSheet
通过CSS设置widget的样式

关于计算机中的颜色表示
按钮类控件
QPushButton
属性 | 说明 |
text | 按钮中的⽂本 |
icon | 按钮中的图标 |
iconSize | 按钮中图标的尺⼨ |
shortCut | 按钮对应的快捷键 |
autoRepeat | 按钮是否会重复触发. 当⿏标左键按住不放时, 如果设为 true, 则会持续产⽣⿏标点击事件; 如果设为 false, 则必须释放⿏标, 再次按下⿏标时才能产⽣点击事件. (相当于游戏⼿柄上的 "连发" 效果) |
autoRepeatDelay | 重复触发的延时时间. 按住按钮多久之后, 开始重复触发. |
autoRepeatInterval | 重复触发的周期 |

代码示例:




Radio Button
属性 | 说明 |
checkable | 是否能选中 |
checked | 是否已经被选中. checkable 是 checked 的前提条件. |
autoExclusive | 是否排他. 选中⼀个按钮之后是否会取消其他按钮的选中. 对于 QRadioButton 来说默认就是排他的 |
设置checkable,虽然不会被选中,但是仍然可以触发事件,是上面的性别变成其他。
- clicked 表⽰⼀次 "点击"
- pressed表示鼠标”按下“
- released表示鼠标”释放“
- toggled表示按钮状态切换
Check Box

Tool Button
显示类控件
Label
属性 | 说明 |
text | QLabel 中的⽂本 |
textFormat | ⽂本的格式
|
pixmap | QLabel 内部包含的图⽚. |
scaledContents | 设为 true 表⽰内容⾃动拉伸填充 QLabel 设为 false 则不会⾃动拉伸 |
alignment | 对⻬⽅式. 可以设置⽔平和垂直⽅向如何对⻬. |
wordWrap | 设为 true 内部的⽂本会⾃动换⾏. 设为 false 则内部⽂本不会⾃动换⾏. |
indent | 设置⽂本缩进. ⽔平和垂直⽅向都⽣效. |
margin | 内部⽂本和边框之间的边距. 不同于于 indent, 但是是上下左右四个⽅向都同时有效. ⽽ indent 最多只是两个⽅向有效(具体那两个方向有效取决于alignment) |
openExternalLinks | 是否允许打开一个外部的链接 |
buddy | 给 QLabel 关联⼀个 "伙伴" , 这样点击 QLabel 时就能激活对应的伙伴. 例如伙伴如果是⼀个 QCheckBox, 那么该 QCheckBox 就会被选中. |
代码示例:显⽰不同格式的⽂本


但是,在窗口放大和缩小的时候,图片不会发生改变。
我们需要在Widget中重写一下resizeEvent函数
- QFrame::Box 矩形边框
- QFrame::Panel 带有可点击区域的面板边框
- QFrame::WinPanel windows风格的边框
- QFrame::HLine 水平线边框
- QFrame::VLine 垂直线边框
- QFrame::StyledPanel 带有可点击区域的面板边框
LCD Number
属性 | 说明 |
intValue | QLCDNumber 显⽰的数字值(int). |
value | QLCDNumber 显⽰的数字值(double). 和 intValue 是联动的. 例如给 value 设为 1.5, intValue 的值就是 2. 另外, 设置 value 和 intValue 的⽅法名字为 display , ⽽不是 setValue 或 者 setIntValue . |
digitCount | 显⽰⼏位数字. |
mode | 数字显⽰形式.
只有十进制的时候才能显示小数点之后的内容 |
segmentStyle | 设置显示风格
|
smallDecimalPoint | 设置比较小的小数点 |
代码示例:倒计时
ProgressBar
属性 | 说明 |
minimum | 进度条最⼩值 |
maximum | 进度条最⼤值 |
value | 进度条当前值 |
alignment | ⽂本在进度条中的对⻬⽅式
|
textVisible | 进度条的数字是否可⻅. |
orientation | 进度条的⽅向是⽔平还是垂直 |
invertAppearance | 是否是朝反⽅向增⻓进度 |
textDirection | ⽂本的朝向 |
format | 展⽰的数字格式
|
代码示例:设置进度条按时间增长
在实际开发中,进度条的取值往往是根据当前任务的实际运行进度来设置的
比如要读取一个很大的文件,就可以获取文件的总的大小,和当前的读取完毕的大小,来设置进度条的比例
通过定时器周期触发信号,主线程调用对应的slot函数,再在slot函数中对当前任务进度进行计算,并更新进度条的页面效果。
Calendar Widget
QCalendarWidget表示一个日历
属性 | 说明 |
selectedDate | 当前选中的日期 |
minimumDate | 最小日期 |
maximumDate | 最大日期 |
firstDayOfWeek | 每周的第一天(也就是日历的第一列)是周几 |
gridVisible | 是否显示表格的边框 |
selectionMode | 是否允许选择⽇期 |
navigationBarVisible | ⽇历上⽅标题是否显⽰ |
horizontalHeaderFormat | ⽇历上⽅标题显⽰的⽇期格式 |
verticalHeaderFormat | ⽇历第⼀列显⽰的内容格式 |
dateEditEnabled | 是否允许⽇期被编辑 |
信号 | 说明 |
selectionChanged(const QDate&) | 当选中的⽇期发⽣改变时发出 |
activated(const QDate&) | 当双击⼀个有效的⽇期或者按下回⻋键时发出,形参是⼀个QDate类型,保存了选中的⽇期 |
currentPageChanged(int, int) | 当年份⽉份改变时发出,形参表⽰改变后的新年份和⽉份 |
代码示例:获取选中的日期
输入类控件
Line Edit
QLineEdit用来表示单行输入框,可以输入一段文字,但是不能换行
核心属性
属性 | 说明 |
text | 输⼊框中的⽂本 |
inputMask | 输⼊内容格式约束 |
maxLength | 最⼤⻓度 |
frame | 是否添加边框 |
echoMode | 显示方式
|
cursorPosition | 光标所在位置 |
alignment | 文字对齐方式,设置水平和垂直方向的对齐 |
dragment | 是否允许拖拽 |
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是新的⽂本。 代码对⽂本的修改不能触发这个信号. |
代码示例:录入个人信息
inputMask只能进行简单的输入格式校验
实际开发中,基于正则表达式的方法才是更核心的方法
Text Edit
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 | 垂直⽅向滚动条的出现策略
|
horizontalScrollBarPolicy | 水平方向滚动条的出现策略
|
核心信号
信号 | 说明 |
textChanged() | ⽂本内容改变时触发 |
selectionChanged() | 选中范围改变时触发 |
cursorPositionChanged() | 光标移动时触发 |
undoAvailable(bool) | 可以进⾏ undo 操作时触发 |
redoAvailable(bool) | 可以进⾏ redo 操作时触发 |
copyAvaiable(bool) | ⽂本被选中/取消选中时触发 |
代码示例:获取多行输入框的内容
- 通过toPlainText方法获取内容的文本
- 类似的,QTextEdit还提供了toMarkdown和toHtml。根据需要我们调整不同的获取方式
代码示例:验证输入框的各种信号
Combo Box
QComboBox表示下拉框
核心属性
属性 | 说明 |
currentText | 当前选中的⽂本 |
currentIndex | 当前选中的条⽬下标. 从0开始计算,如果当前没有条目被选中,值为-1 |
editable | 是否允许修改 设为true时,QComboBox的行为非常接近QLineEdit,也可以设置validtor |
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 时有效) |
代码示例:从文件中加载下拉框的选项
很多时候下拉框的选项并非是固定的,而是通过读取文件/网络得到的
Qt中提供了QFile实现文件的读写功能。当然使用C++标准库也可以实现类似的功能。
Spin Box
属性 | 说明 |
value | 存储的数值 |
singleStep | 每次调整的补“步长”,按下一次按钮数据变化多少 |
displayInteger | 数字的进制 |
minimum | 最小值 |
maximum | 最⼤值 |
suffix | 后缀 |
prefix | 前缀 |
wrapping | 是否允许换⾏ |
frame | 是否带边框 |
alignment | ⽂字对⻬⽅式. |
readOnly | 是否允许修改 |
buttonSymbol | 按钮上的图标
|
accelerated (加速的) | 按下按钮时是否为快速调整模式 |
correctionMode | 输入有错误如何修正
|
keyboardTrack | 是否开启键盘跟踪 设为 true, 每次在输⼊框输⼊⼀个数字, 都会触发⼀次 valueChanged() 和 textChanged() 信号 设为 false, 只有在最终按下 enter 或者输⼊框失去焦点, 才会触发 valueChanged() 和textChanged()信号 |
核心信号
信号 | 说明 |
textChanged(QString) | 微调框的文本发生改变时会触发 参数QString带有前缀和后缀 |
valueChanged(int) | 微调框的文本发生改变时会触发 参数int,表示当前的数值 |
代码示例:调整麦当劳购物车中的份数
Date Edit & Time Edit


属性 | 说明 |
datetime | 时间⽇期的值. 形如 2000/1/1 0:00:00 |
date | 单纯⽇期的值. 形如 2001/1/1 |
time | 单纯时间的值. 形如 0:00:00 |
displayFormat | 时间日期格式,形如 yyyy/M/d H:mm
不同的语言/库中设定的规则存在差异,需要使用的时候需要进行查阅 |
minimumDateTime | 最小日期时间 |
maximumDateTime | 最大日期时间 |
timeSpec |
|
信号 | 说明 |
dateChanged(QDate) | 日期改变时触发 |
timeChanged(QTime) | 时间改变时触发. |
dateTimeChanged(QDateTime) | 时间日期任意一个改变时触发 |
代码示例:实现日期计算器
Dial
使用QDial表示一个按钮
属性 | 说明 |
value | 持有的数值 |
minimum | 最⼩值 |
maximum | 最大值 |
singleStep | 按下方向键的时候改变的步长 |
pageStep | 按下 pageUp / pageDown 的时候改变的步⻓. |
sliderPosition | 界⾯上旋钮显⽰的 初始位置 |
tracking | 外观是否会跟踪数值变化. 默认值为 true. ⼀般不需要修改. |
wrapping | 是否允许循环调整. 即数值如果超过最⼤值, 是否允许回到最⼩值. (调整过程能否 "套圈") |
notchesVisible | 是否显⽰ 刻度线 |
notchTarget | 刻度线之间的相对位置. 数字越⼤, 刻度线越稀疏 |
核心信号
属性 | 说明 |
valueChanged(int) | 数值改变时触发 |
rangeChanged(int, int) | 范围变化时触发 |
代码示例:调整窗口透明度
Slider
使用QSlider表示一个滑动条
属性 | 说明 |
value | 持有的数值 |
minimum | 最小值 |
maximum | 最大值 |
singleStep | 按下⽅向键的时候改变的步⻓ |
pageStep | 按下 pageUp / pageDown 的时候改变的步⻓ |
sliderPosition | 滑动条显⽰的 初始位置 |
tracking | 外观是否会跟踪数值变化 默认值为true,一般不需要修改 |
orientation | 滑动条的方向是水平还是垂直 |
invertedAppearance | 需要反转滑动条的方向 |
tickPosition | 刻度的位置. |
tickInterval | 刻度的密集程度. |
核心信号
属性 | 说明 |
valueChanged(int) | 数值改变时触发 |
rangeChanged(int, int) | 范围变化时触发 |
代码示例:通过自定义快捷键调整滑动条的位置
多元素控件
Qt中提供的多元素控件有
- QListWidget
- QListView
- QTableWidget
- QTableView
- QTreeWidget
- QTreeView
xxWidget 和 xxView 之间的区别
- QTableView是基于MVC设计的控件,QTableView本身不持有数据。使用QTableView的时候需要用户创建一个Model对象,并且把Model和QTableView关联起来。后续修改Model中的数据就会影响到QTableView的显示;修改QTableView的显示也会影响到Model中的数据(双向绑定)
- QTableWidget则是QTableView的子类,对Model进行了封装,不需要用户手动创建Model对象,直接可以往QtableWidget中添加数据了。
List Widget
核心属性
属性 | 说明 |
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 | 设置文本 |
setTextAlignmen | 设置文本对齐方式 |
代码示例:使用ListWidgetx
Table Widget
⽅法 | 说明 |
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) | 选中不同单元格时触发 |
⽅法 | 说明 |
row() | 获取当前是第⼏行 |
column() | 获取当前是第⼏列 |
setText(const QString&) | 设置⽂本 |
setTextAlignment(int) | 设置⽂本对⻬ |
setIcon(const QIcon&) | 设置图标 |
setSelected(bool) | 设置被选中 |
setSizeHints(const QSize&) | 设置尺⼨ |
setFont(const QFont&) | 设置字体 |
代码示例:
构造表中的初始化数据
编写按钮的slot函数
Tree Widget
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名称 |
QTreeWidget核心信号
信号 | 说明 |
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) | 元素被折叠时触发 |
属性 | 说明 |
text | 持有的⽂本 |
textAlignment | ⽂本对⻬⽅式 |
icon | 持有的图表 |
font | ⽂本字体 |
hidden | 是否隐藏 |
disabled | 是否禁⽤ |
expand | 是否展开 |
sizeHint | 尺⼨⼤⼩ |
selected | 是否选中 |
⽅法 | 说明 |
addChild(QTreeWidgetItem* child) | 新增⼦节点 |
childCount() | 子节点的个数 |
child(int index) | 获取指定下标的子节点,返回QtreeWidgetItem* |
takeChild(int index) | 删除对应下标的子节点 |
removeChild(QTreeWidgetItem* child) | 删除对应的子结点 |
parent() | 获取该元素的父节点 |
代码示例:
构造初始化数据
实现按钮的slot
容器类控件
Group Box
属性 | 说明 |
title | 分组框的标题 |
alignment | 分组框内部内容的对齐方式 |
flat | 是否为“扁平”模式 |
checkable | 是否可选择 设为true,则在title前方会多出一个可勾选的部分 |
checked | 描述分组框的选择状态 (前提是 checkable 为 true) |
代码示例:
Tab Widget
属性 | 说明 |
tabPosition | 标签页所在的位置
|
currentIndex | 当前选中了第几个标签页(从0开始计算) |
currentTabText | 当前选中的标签⻚的⽂本 |
currentTabName | 当前选中的标签⻚的名字 |
currentTabIcon | 当前选中的标签⻚的图标 |
currentTabToolTip | 当前选中的标签⻚的提⽰信息 |
tabsCloseable | 标签⻚是否可以关闭 |
movable | 标签⻚是否可以移动 |
核心信号
属性 | 说明 |
currentChanged(int) | 在标签⻚发⽣切换时触发, 参数为被点击的选项卡编号 |
tabBarClicked(int) | 在点击选项卡的标签条的时候触发. 参数为被点击的选项卡编号. |
tabBarDoubleClicked(int) | 在双击选项卡的标签条的时候触发. 参数为被点击的选项卡编号. |
tabCloseRequest(int) | 在标签页关闭时触发。参数为被关闭的选项卡编号 |
代码示例:使用标签页管理多组控件
编写 widget.cpp, 进⾏初始化, 给标签⻚中放个简单的 label
编写按钮的slot函数
- 使用count()获取标签页的个数
- 使用addTab新增标签页
- 使用removeTab删除标签页
- 使用currentIndex获取当前标签页的下标
- 使用setCurrentIndex切换当前标签页
布局管理器
垂直布局
属性 | 说明 |
layoutLeftMargin | 左侧边距 |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上方边距 |
layoutBottomMargin | 下方边距 |
layoutSpacing | 相邻元素之间的间隔 |
代码示例:使用QVBoxLayout管理多个控件
代码示例:创建多个QVBoxLayout

水平布局
核心属性(和QVBoxLayout是一致的)
属性 | 说明 |
layoutLeftMargin | 左侧边距 |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上方边距 |
layoutBottomMargin | 下方边距 |
layoutSpacing | 相邻元素之间的间隔 |
网格布局
核心属性
属性 | 说明 |
layoutLeftMargin | 左侧边距 |
layoutRightMargin | 右侧边距 |
layoutTopMargin | 上⽅边距 |
layoutBottomMargin | 下⽅边距 |
layoutHorizontalSpacing | 相邻元素之间水平方向的间距 |
layoutVerticalSpacing | 相邻元素之间垂直方向的间距 |
layoutRowStretch | 行方向的拉伸系数 |
layoutColumnStretch | 列方向的拉伸系数 |
代码示例:
QGridLayout也提供了setRowStretch设置行之间的拉伸系数。
上述案例中,直接设置setRowStretch效果不明显。因为每个按钮的高度都是固定的,需要把按钮的垂直方向的sizePolicy属性设置为QSizePolicy::Expading尽可能充满布局管理器,才能看到效果
表单布局

Spacer
属性 | 说明 |
width | 宽度 |
height | 高度 |
hData | 水平方向的sizePolicy
|
vData | 垂直⽅向的 sizePolicy 选项同上 |