Line Edit
QLineEdit用来表示单行输入框,可以输入一段文本,但是不能换行
核心属性:
核心信号
信号 | 说明 |
void cursorPositionChanged(int old,int new) | 当鼠标移动时发出此型号,old为先前位置,new为新位置 |
void editingFinished() | 当按返回或回车键时,或行编辑失去焦点时,发出此信号 |
void returnPressed() | 当返回或回车键按下时发出此信号,如果设置了验证器,必须要验证通过才能触发 |
void selectionChanged() | 当选中的文本发生改变时,发出此信号 |
void textChange(const QString &text) | 当QLineEdit中的文本改变时,发出此信号,test是新的文本。代码对文本的修改也能触发此信号。 |
void textEdited(const QString &text) | 当QLineEdit中的文本改变时,发出此信号,text时新的文本。代码对文本的修改不能触发此信号。 |
例:
实现用户能输入账号,密码及提交
在ui界面创建label进行输入内容提示,创建对应的lineEdit输入框,提交按钮
进行输入框初始化
设置pushButton槽函数
inputMask功能比较有效,只能进行简单的验证
若要实现比较复杂的验证需要使用“正则表达式”
正则表达式,本质上是一个带有特殊字符的字符串,特殊字符用来表示另一个字符串的特征,借助正则表达式来描述一些具有一定特定的字符串
随用随查,无需记忆
例:
在ui界面创建一个lineEdit和pushButton控件
设置提交按钮初始状态
只有当输入字符为合法手机号码时才允许进行提交
创建正则表达式及验证器
通过定义textEdited槽函数实现lindEdit内容发生修改就调用验证器
当输入以1开头,后面跟上10个数字的字符串时,就可以进行pushButton的点击
Text Edit
QTextEdit表示多行输入框,也是一个富文本&markdown编辑器,并且能在内容超出编辑范围时自动提供滚动条
核心属性
属性 | 说明 |
markdown | 输入框持有的内容,支持 markdown格式,能够自动的对 markdown文本进行渲染成html |
html | 输入框持有的内容支持大部分 htm标签,包括img和table等 |
placeHolderText | 输入框为空时提示的内容 |
readOnly | 是否只读 |
undoRedoEnable | 是否开启undo/redo功能 按下ctrl+z触发undo 按下ctrl+y触发redo |
autoFormating | 开启自动格式化 |
tabstopWidth | 按下缩进占多少空间 |
overwirteMode | 是否开启覆盖写模式 |
acceptRichText | 是否结束富文本内容 |
verticalScrollBarPolicy | 垂直方向滚动条的出现策略 Qt::ScorllBarAsNeeded:根据内容自动决定是否需要滚动条。这种默认值 Qt::ScorllBarAlwaysOff:总是关闭滚动条 Qt::ScorllBarAlwaysOn:总是显示滚动条 |
horizontalScrollBarPolicy | 水平滚动条的出现策略 Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条。这是默认值 Qt::ScorllBarAlwaysOff:总是关闭滚动条 Qt::ScrollBarAlwaysOn:总数显示滚动条 |
核心信号:
信号 | 说明 |
textChanged() | 文本内容改变时触发 |
selectionChanged() | 选中范围改变时触发 |
cursorPositionChanged() | 光标移动时触发 |
undoAvailable(bool) | 可以进行undo操作时触发 |
redoAvailable(bool) | 可以进行redo操作时触发 |
copyAvaiable(bool) | 文本被选中/取消选中时触发 |
例:
在ui界面创建一个textEdit用于接收输入内容,label用于显示textEdit内容
转到textEdit的textChanged槽函数
Combo Box
QComboBox表示下拉框
核心属性
属性 | 说明 |
currentText | 当前选中的文本 |
currentIndex | 当前选中的条目下标 从0开始计算,如果当前没有条目被选中,值为-1 |
editable | 是否允许修改 设置为true时,QComboBox的行就类似于QLineEdit,也可以设置validator |
iconSize | 下拉框图标大小 |
maxCount | 最多允许有多少个条目 |
核心接口
接口 | 说明 |
addItem(const QString&) | 添加一个条目 |
currentIndex() | 获取当前条目的下标 |
currentText() | 获取当前条目的文本内容 |
核心信号
信号 | 说明 |
activated(int) activated(QString & text) | 当用户选中了一个选项时发出 这个时候相当于用户点开下拉框,并且鼠标划过某个选项 此时还没有确认做出选择 |
currentIndexChanged(int) currentIndexChanged(const QString & text) | 当前选项改变时发出 此时用户已经明确的选择了一个选项 用户操作或者通过程序操作都会触发这个信号 |
editTextChanged(const QString & text) | 当编辑框中的文本改变时发出 (editable为true时有效) |
例:
通过ComboBox模拟点餐
在ui界面创建两个label和两个ComboBox
在构造函数中初始化ComboBox内容
在ui界面创建提交按钮pushButton
转到pushButton的clicked槽函数
能顺利获取到ComboBox内容
实现通过文件导入ComboBox内容
在ui界面创建一个label和ComboBox
在电脑创建一个txt文件,在其内输入不同专业
在构造函数读取文件内容
从而实现将文件内容设置为ComboBox选项
Spin Box
使用QSpinBox或者QDoubleSpinBox表示“微调框”,它时带有按钮的输入框,可以用来输入整数/浮点数,通过点击按钮来修改数值大小
如:
核心属性
属性 | 说明 |
value | 存储的数值 |
singleStep | 每次调整的“步长”,按下一次按钮数据变化多少 |
displayInteger | 数字的进制,例如displayInteger设为10,则是按十进制表示,设为2,则为2进制表示 |
minimum | 最小值 |
maximum | 最大值 |
suffix | 后缀 |
prefix | 前缀 |
wrapping | 是否允许换行 |
frame | 是否带边框 |
alignment | 文字对齐方式 |
readOnly | 是否允许修改 |
buttonSymbol | 按钮上的图标 UpDownArrows:上箭头模形式 PlusMinus:加减号形式 NoButtons:没有按钮 |
accelerated | 按下按钮时是否为快速调整模式 |
correctionMode | 输入有误时如何修正 QAbstractSpinBox::CorrectToPreviousValue:如果用户输入了一个无效的值,那么SpinBox会恢复为上一个有效值 QAbstractSpinBox::CorrectToNearesValue: 如果用户输入了一个无效的值,SpinBox会恢复为最接近的有效值。 |
keyboardTrack | 是否开启键盘跟踪 设为true,每次在输入框输入一个数字,都会触发一次valueChanged()和 textChanged()信号 设为false,只有在最终按下enter或者输 入框失去焦点,才会触发valueChanged() 和textChanged()信号 |
核心信号
信号 | 说明 |
textChanged(QString) | 微调框的文本发生改变时会触发 参数QString带有前缀和后缀 |
valueChanged(int) | 微调框的文本发生改变时会触发 参数int,表示当前的数值 |
例:
在ui界面创建两个label,一个SpinBox,一个DoubleSpinBox
再创建一个pushButton
在构造函数对得分范围进行初始化
转到pushButton的槽函数,将得分用qDebug进行输出
Date Edit 和Time Edit
使用DateEdit作为日期的微调框
使用TimeEdit作为时间的微调框
使用Date/Time Edit作为时间日期的微调框
三个控件使用方法类似
DateTime Edit核心属性
属性 | 说明 |
dateTime | 时间日期的值,如2000/1/1 0:00:0 |
date | 单纯日期的值,如2000/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:显示协调世界时 Qt::OffsetFromUTC:显示相对于UTC的偏移量(时差) |
核心信号
信号 | 说明 |
dateChanged(QDate) | 日期改变时触发 |
timeChanged(QTime) | 时间改变时触发 |
dataTimeChanged(QDateTime) | 时间日期任意一个改变时触发 |
例:
实现一个时间计算,计算两个时间中间的间隔时多少天/多少小时
在ui界面创建两个datetime Edit,一个pushButton,一个label
转到pushButton的clicked槽函数
但是此时代码存在逻辑错误,若时间日期相隔几个小时,但不属于同一天,进行计算时就会发生错误
如:
两日期相差6小时,却计算出1天6小时
不使用daysto计算日期差,通过秒数插值求日期
Dial
使用QDial表示一个旋钮
核心属性
属性 | 说明 |
value | 持有的数值 |
minimum | 最小值 |
maximum | 最大值 |
singleStep | 按下方向键的时候改变的步长 |
pagesStrp | 按下pageUp/pageDown的时候改变的步长 |
sliderPosition | 界面上旋钮显示的初始位置 |
tracking | 外观是否会跟踪数值变化 默认值为true,一般无需修改 |
wrapping | 是否允许循环调整 即数值如果超过最大值,是否允许回到最小值 |
notchesVisble | 是否显示刻度线 |
notchTarget | 刻度线之间的相对位置 数字越大,刻度线越稀疏 |
例:
通过旋钮控制窗口不透明度opcity
在ui界面创建一个旋钮
在构造函数进行初始化
转到dial的valueChanged槽函数
Slider
使用Slider表示一个滑动条
如:
核心属性
属性 | 说明 |
value | 持有的数值 |
minimum | 最小值 |
maximum | 最大值 |
singleStep | 按下方向键的时候改变的步长 |
pagesStrp | 按下pageUp/pageDown的时候改变的步长 |
sliderPosition | 滑动条显示的初始位置 |
tracking | 外观是否会跟踪数值变化, 默认值为true,无需修改 |
orientation | 滑动条的方向是水平还是垂直 |
invertedAppearance | 是否要翻转滑动条的方向 |
tickPosition | 刻度的位置 |
tickInterval | 刻度的密集程度 |
核心信号
信号 | 说明 |
valueChanged(int) | 数值改变时触发 |
rangeChanged(int,int) | 范围变化时触发 |
例:
通过两个不同方向的滑动条分别控制窗口宽度和高度
在构造函数翻转垂直方向滑动条(Vertical Silder)的方向
对滑动条进行初始化,将滑动条初始值设置为窗口的高度和宽度
转到滑动条的valueChanged槽函数,实现将horizentalSlider的值设置为窗口的宽度,将verticalSlider的值设置为窗口的高度
实现通过滑动条修改窗口大小
实现通过自定义快捷键操控滑动条
在构造函数创建快捷键进行绑定,头文件进行声明槽函数
实现各个按键的槽函数,来通过快捷键发出信号,调用槽函数,在槽函数内对滑动条的值进行修改,滑动条值发生修改,发送信号,调用槽函数,修改窗口大小