QT中的常用控件 (三)

目录

[1. 输入类控件](#1. 输入类控件)

[2. LineEdit](#2. LineEdit)

[2.1 核心属性](#2.1 核心属性)

[2.2 核心信号](#2.2 核心信号)

[2.3 demo1录入个人信息](#2.3 demo1录入个人信息)

[2.4 demo2使用正则表达式加强手机号验证](#2.4 demo2使用正则表达式加强手机号验证)

[2.5 demo3 密码校验器](#2.5 demo3 密码校验器)

[2.6 demo4显示密码](#2.6 demo4显示密码)

3.TextEdit

[3.1 核心属性](#3.1 核心属性)

[3.2 核心信号](#3.2 核心信号)

[3.3 demo1 核心信号的触发演示](#3.3 demo1 核心信号的触发演示)

[4. ComboBox](#4. ComboBox)

[4.1 核心属性](#4.1 核心属性)

[4.2 核心方法](#4.2 核心方法)

[4.3 核心信号](#4.3 核心信号)

[4.4 demo1麦当劳点餐](#4.4 demo1麦当劳点餐)

[4.5 demo2菜单选择器](#4.5 demo2菜单选择器)

[5. SpinBox](#5. SpinBox)

[5.1 核心属性](#5.1 核心属性)

[5.2 核心信号](#5.2 核心信号)

[5.3 demo1调整点餐份数](#5.3 demo1调整点餐份数)

[6. QDateTimeEdit](#6. QDateTimeEdit)

[6.1 核心属性](#6.1 核心属性)

[6.2 核心信号](#6.2 核心信号)

[6.3 demo1实现一个日期计算器](#6.3 demo1实现一个日期计算器)

[7. QDial](#7. QDial)

[7.1 核心属性](#7.1 核心属性)

[7.3 核心信号](#7.3 核心信号)

[7.4 demo1使用旋钮控制窗口的不透明度.](#7.4 demo1使用旋钮控制窗口的不透明度.)

[8. QSlider](#8. QSlider)

[8.1 核心属性](#8.1 核心属性)

[8.2 demo1使用进度条控制窗口大小](#8.2 demo1使用进度条控制窗口大小)


1. 输入类控件

本文旨在介绍Qt中多种输入控件的使用方法,包括QLineEdit、QTextEdit、QComboBox、QSpinBox、QDateEdit、QDial和QSlider等,详细描述它们的核心属性、信号及其应用场景,如录入个人信息、验证输入数据、获取多行输入框内容、模拟点餐、调整窗口透明度和大小等

2. LineEdit

QLineEdit用来表示单行输入框,可以输入一段文本,但是无法换行。

2.1 核心属性

text : 输入框中的文本
inputMask : 输入内容的格式限制
maxLength : 文本的最大长度
frame : 是否添加边框
echoMode : 显示方式

QLineEdit::Normal,这是echoMode的默认值,文本框会显示输入的文本。

QLineEdit::Password,这种模式下输入的字符会被隐藏。

QLineEdit::NoEcho,在这种模式下,文本不会显示任何输入的字符。
cursorPosition : 光标所在位置
aligment : 文字对齐方式,设置水平和垂直方向的对齐
dragEnabled : 是否允许被拖拽
readOnly : 是否是只读的
placeHolderText : 当输入框没有文本的时候,自动显示的提示信息
clearButtonEnabled : 是否会自动显示清楚按钮

2.2 核心信号

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.3 demo1录入个人信息

1)创建QLineEdit等相关控件

2)设置QLineEdit的相关属性

3)点击提交时的获取相关内容

4)测试效果

2.4 demo2使用正则表达式加强手机号验证

1)创建一个LineEdit和一个按钮

2)使用正则表达式给LineEdit注册一个验证器

3)设置当LineEdit变化的时候的验证逻辑

需要注意的是validate的返回值不是bool类型,而是一个QValidator::State枚举类型,里面包含了三种状态,按需设置即可。

4)测试效果

在输入第二位的时候尝试输入非345678的数字,输入框中无法进行输入,并且只有当输入了11个数字提交按钮才可以激活。

2.5 demo3 密码校验器

1)创建两个LineEdit和一个label

2)初始化LineEdit

这里设置一个只能输入字母和数字的验证器

3)密码验证合法性以及一致性逻辑

在compare函数中创建了一个QRegExp对象来验证LineEdit中的内容判断是否合法,并且比对两个LineEdit中的内容是否一致

4)当LineEdit中文本发生变化时触发槽函数调用compare函数

此处的(void) arg1只是为了防止警告

4)测试效果

我首先分别在两个输入框输入了8个8,此时密码一致但是没有验证通过,因为regExp验证的时候密码必须由8个字母和数字组成,不能是纯数字。

需要知道的是LineEdit中的验证器只有通过了验证才可以输入字符进去,与验证密码的逻辑不一致。如果将验证密码是否合法放在验证器中,那么就无法输入了。

2.6 demo4显示密码

1)为上面的代码增加一个显示密码的checkBox,展示刚才所说的密码验证逻辑

2)测试效果

3.TextEdit

QTextEdit表示多行的输入框,是一个富文本 & mark的编辑器,并且能在内容超出编辑范围的时候自动提供滚动条.

3.1 核心属性

markdown: 输入框中内持有的功内容,支持markdown格式,自动将markdown文本进行html渲染.
html : 输入框持有的内容,可以支持大部分的html标签.
placeHolderText : 输入框为空的时候的提示符.
readOnly : 输入框的内容是否是只读的.
undoRedoEnable : 是否开启undo/redo 功能.
autoFormating : 开启格式化.
tabstopWidth : 按下缩进占多少空间.
overwriteMode : 是否开启复写模式
acceptRichText : 是否接受富文本内容.
verticalScrollBarpolicy : 垂直方向滚动条的出现策略,默认是根据内容是否需要滚动条自动添加.
horizontaScrollBarpolicy : 水平方向滚动条出现的策略.

3.2 核心信号

textChange() : 文本内容发生变化的时候触发.
selectionChange(): 选中范围改变时触发.
cursorPositionChanged(): 光标移动时触发.
undoAvailable(bool) : 可以进行undo操作时触发.
redoAvailable(bool) : 可以进行redo操作时触发.
copyAvailable(bool) : 文本被选中/取消选中时触发.

3.3 demo1 核心信号的触发演示

1)准备一个多行输入框

2)编写各个信号触发时的槽函数

a)textChanged()

b)selectionChanged()

c)cursorPositonChanged()

d)copyAvailable()

copyAvailable()只有在选中状态下才是可用的

e)redoAvailable()和undoAvailable()

这两个信号是互斥的,同一时间两者是相反的状态

3)测试效果

可以看到,当输入aaa的时候,文本内容改变,光标位置改变,undo状态可用.

当选中内容的时候,copy可用.当按下ctrl+z以后redo状态可用.

4. ComboBox

ComboBox 表示的是下拉框.

4.1 核心属性

currentText : 当前选中的文本.
currentIndex : 当前选中条目下标.
editable: 是否允许修改.
iconSize : 下拉图框的大小
maxCount: 最多允许有多少个条目

4.2 核心方法

addItem(const QString) 添加一个条目.
currentText() 获取当前条目的文本
currentIndex() 当前获取条目的下标,从0开始计算,如果没有选中条目值为-1.

4.3 核心信号

**ativated(int) ,activated(const QString & text)**当⽤⼾选择了⼀个选项时发出.这个时候相当于⽤⼾点开下拉框, 并且⿏标划过某个选项.此时还没有确认做出选择.
currentIndexChanged(int),currentIndexChanged(const QString & text),当前选项发生改变,此时用户已经作出了一个明确的选择.
editTextChanged(const QString & text) 当编辑框中的文本发生改变时,editable为true时才有效

4.4 demo1麦当劳点餐

1)创建ComboBox控件

2)初始化ComboBox

3)选择某一条目时修改标签框的文本内容

4)确认点单后台收到消息的逻辑

5)测试效果

4.5 demo2菜单选择器

实现从文件读取菜单并且可以本地输入菜名上传到文件中

1)加载初始条目以及初始化ComboBox

2)在下拉框中增加条目

3)测试效果

5. SpinBox

使⽤ QSpinBox 或者 QDoubleSpinBox 表⽰ "微调框", 它是带有按钮的输⼊框. 可以⽤来输⼊整数/浮点数. 通过点击按钮来修改数值⼤⼩.

5.1 核心属性

value: 存储的数值.
singleStep: 每次调整的 "步⻓". 按下⼀次按钮数据变化多少.
displayInteger : 数字的进制. 例如 displayInteger 设为 10, 则是按照 10 进制表⽰.
minimum : 最⼩值
maximum : 最⼤值
suffix : 后缀
prefix : 前缀
wrapping : 是否允许换⾏
frame : 是否带边框
alignment : ⽂字对⻬⽅式.
readOnly : 是否允许修改
buttonSymbol: 按钮上的图标

5.2 核心信号

textChanged(QString): 微调框的文本发生改变的时候会触发,QString带有前缀和后缀.
valueChanged(int) : 微调框中的文本发生改变时会触发,参数int,表示当前的数值.

5.3 demo1调整点餐份数

1)创建SpinBox,ComboBox控件

在UI界面双击ComboBox然后点击加号添加条目

2)初始化SpinBox

3)获取点单内容

4)测试效果

6. QDateTimeEdit

QDateTimeEdit是一种时间微调框.

6.1 核心属性

datetime : 时间日期的值,如 2026/01/07 22:01:45.
date : 日期值,如 2026/01/07.
time : 时间值,如 22:01:45.
displayFormat : 时间日期格式,形如 yyyy/M/d H:mm.
minimumDatetime : 最小时间日期
maximumDatetime: 最大时间日期
timeSpec : Qt::LocalTime ,显示本地时间 Qt::UTC 显示协调时间时 Qt::OffestFromUTC相对于UTC的偏移量.

6.2 核心信号

dateChanged(QDate) 日期改变时触发.
timeChaged(QTime) 时间改变时触发.
datetimeChaged(QDateTime) 时间日期任意一个改变时触发.

6.3 demo1实现一个日期计算器

1)创建两个QDateTimeEdit控件

2)计算日期

3)测试效果

7. QDial

Qt中QDial是一个旋钮.

7.1 核心属性

value: 持有的数值.
minimun : 最小值.
maximum : 最大值.
singleStep : 按下方向键时改变的步长.
pageStep : 按下pageUP/pageDown 的时候的步长改变.
sliderPosition : 界面上旋钮的初始位置.
tracking : 外观是否会跟踪数值,默认为true.
wrapping: 是否允许循环调整.如果数值超过最大值是否允许回到最小值.
notchesVisible : 是否显示刻度线.
notchTarge : 刻度线的相对位置.

7.3 核心信号

valueChanged(int value) 信号发生改变的时候触发.
rangeCanged(int,int) 范围发生变化时触发.

7.4 demo1使用旋钮控制窗口的不透明度.

1)创建一个旋钮

2)初始化旋钮

3)旋转时修改不透明度

4)测试效果

8. QSlider

使用QSlider表示一个进度条.

8.1 核心属性

它的属性与QDial类似,这里只列出以下不一样的

tickPosition : 刻度的位置.
ticklnterval : 刻度的密集程度

8.2 demo1使用进度条控制窗口大小

1)创建竖向和横向的进度条

2)初始化进度条

3)进度条发生改变时修改窗口大小

4)测试效果

8.3 demo2使用快捷键控制进度条

1)创建快捷键以及链接槽函数

2)按下快捷键时减少增加数值控制进度条

3)测试效果

相关推荐
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner1 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz6 天前
QML Hello World 入门示例
qt
xcyxiner9 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner10 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner10 天前
DicomViewer (添加模型类)3
qt
xcyxiner11 天前
DicomViewer (目录调整) 2
qt
xcyxiner11 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00613 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术13 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript