目录
[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.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)测试效果
