马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目次
QLineEdit
输入个人信息案例
正则表达式
验证两次暗码是否一致
切换表现暗码状态
QTextEdit
QComboBox
模拟麦当劳点餐
通过文件加载下拉框内容
QSpinBox
升级版麦当劳点餐
QDateTimeEdit
时间计算器
QDial
QSlider
QLineEdit
QLineEdit 用来表示单行输入框,可以输入一段文本,但是不能换行
核心属性
属性 说明 text输入框中的文本 (通过代码或直接操纵界面的文本框,都会改变test属性) inputMask输入内容格式约束 maxLength最大长度 frame是否添加边框 echoMode表现方式
QLineEdit::Normal:这是默认值,文本框会表现输入的文本
QLineEdit: assword:在这种模式下, 输入的字符会被隐藏,通常用星号(*)或等号(=)取代
QLineEdit::NoEcho:在这种模式下,文本框不会表现任何输入的字符 cursorPosition光标所在位置 alignment笔墨对齐方式,设置程度和垂直方向的对齐 dragEnabled是否允许拖拽 readOnly是否是只读的(不允许修改) placeHolderText当输入框内容为空的时间,表现什么样的提示信息,输入内容后提示信息就消失clearButtonEnabled是否会自动表现出“扫除按钮"
也就是输入框有内容时,输入框右边是否有小叉号,点击就能清空输入框内容 核心信号:
属性 说明void cursorPositionChanged(int old, int new)当鼠标移动时发出此信号
old为先前的位置,new为新位置void editingFinished()当按返回或者回车键或者行编辑失去核心时,发出此信号void returnPressed()当返回或回车键按下时发出此信号
如果设置了验证器,必须要验证通过才能触发void selectionchanged()当选中的文本改变时,发出此信号void textChanged(constQString &text)当OLineEdit中的文本改变时,发出此信号
text是新的文本
代码对文本的修改能够触发这个信号void textEdited(const QString &text))当QLineEdit中的文本改变时,发出此信号
text是新的文本
代码对文本的修改不能触发这个信号 输入个人信息案例
创建下面的控件:
并改变它们的 objectName,方便后续修改时调用:
初始化第一个输入框,设置 提示信息 和 删除按钮:
结果为:
初始化第二个输入框,设置 提示信息、删除按钮 和 表现暗码的格式:
结果为:
初始化第三个输入框,设置 提示信息、删除按钮 和 格式约束:
此时第三个输入框,只能输入11位数字,再按键盘没有任何反应:
下面将 QPushButton 转到槽,编写 QPushButton 的槽函数:
运行步伐,输入下面的信息:
此时在 控制板 上就会打印输入的信息:
此处咱们只是举行简单打印,现实开辟中可以通过网络把数据发给服务器
正则表达式
inputMask 功能比较有限,只能举行简单的验证,像我们上面实现的个人信息中的电话时,只能限制是 11位 数字,并不能有其他限制
如果想让电话号码第一位只能输入 1 这种限制条件,就需要使用 正则表达式
正则表达式是计算机中的通用概念,和具体的编程语言无关
正则表达式,本质上就是一个带有特别字符的字符串,特别字符用来表示另一个字符串的特征,此时就可以借助正则表达式来形貌出一些具有肯定特点的字符串
基于这些特点,就可以完成字符串的匹配
下面在 图形化界面 中,拖动一个 LineEdit 和 一个按钮,并把这个按钮的 enabled 属性取消勾选,设为 不可提交:
此处的规则是
- 输入框要查抄输入的内容是否是合法的手机号码
- 如果是,则按钮设为可用状态;如果不是,则设为禁用状态
在构造函数中写正则表达式:
这是一个简单的验证手机号码的正则表达式
- ^ 表示以 xxx 开头,后面跟着的 1,意思就是以 1开头
- \d 表示数字,为了在 C++ 字符串中使用,需要写作 \\d
- {10} 表示前面的内容重复出现 10 次,\d 数字要重复出现 10 次
- $ 表示末端了
设置完正则表达式后,还需要验证器基于正则表达式举行验证:
下面再右键 LineEdit,点击 转到槽,选择 textEdited,表示输入框的内容发生改变时发出信号:
- 通过 ui->lineEdit->validator() 获取验证器
- 通过 ui->lineEdit->validator()->validate() 执行验证器的验证方法
- validate函数的参数是 validate(QString& , int&)
- 第一个参数是要验证的字符串,参数范例是 QString&,而不是 const QString&,所以不能直接使用槽函数的 test 参数
- 第二个参数表示,如果你的字符串不符合规则,是从哪个位置开始不符合的(没有什么用,调用该函数时传入即可)
下面运行步伐,按钮不允许点击:
输入符合正则表达式的电话号码后,按钮就允许点击了,而且这里第一个数字必须是1,按其他数字无法输入:
验证两次暗码是否一致
验证两次暗码是否一致,这样的场景我们经常遇到,在设置暗码时,每每需要我们输入两次暗码,来确保我们两次输入的暗码是一样的
下面创建 一个Label 和 两个QLineEdit:
先初始化两个输入框:
两个 LineEdit 都分别 转到槽,由于这两个槽函数代码逻辑比较雷同,都是比较两次暗码是否相同,所以可以创建一个 compare 函数完成比较功能,两个槽函数调用 compare函数 即可:
之所以在两个槽函数中,添加 (void)arg1 这种语句,是由于我们并没有使用槽函数提供的参数,此时就会报警告,为了消除这个警告,就加上这个强制范例转换的语句,既不会影响代码的结果,也可以消除警告
运行步伐,刚开始会表现暗码为空:
第一个和第二个输入框的暗码差别时:
第一个和第二个输入框的暗码相同时:
切换表现暗码状态
针对输入的暗码,可以切换"表现暗码"状态,一样平常也使用比较多
下面拖动一个 LineEdit 和一个 checkBox:
接下来可以将 check Box 转到槽,选择 toggle 信号,表示切换状态时发送信号:
运行步伐,初始情况下是 PassWord 模式的:
勾选表现暗码,就变为 Normal 模式了,可以表现输入的暗码:
QTextEdit
QTextEdit 表示多行输入框,也是一个富文本&markdown 编辑器
而且能在内容超出编辑框范围时自动提供滚动条
Qt 中表示多行输入框有两种选择:
- QTextEdit:不仅能表示纯文本,还可以表示 html和 markdown
- QPlainTextEdit:只能表示纯文本(Plain Text)
除了格式差别之外,剩下都是大同小异的,下面以 QTextEdit 为例举行讲授
核心属性
属性 说明 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::ScrollBarAlwavson:总是表现滚动条horizontalScrollBarPolicy程度方向滚动条的出现策略
Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条,这是默认值
Qt::ScrollBarAlwaysoff:总是关闭滚动条
Qt::ScrollBarAlwayson:总是表现滚动条 核心信号
信号说明textChanged()文本内容改变时触发selectionchanged()选中范围改变时触发cursorPositionchanged()光标移动时触发undoAvailable(bool)可以举行 undo 操纵时触发redoAvailable(bool)可以举行 redo 操纵时触发copyAvaiable(bool)文本被选中/取消选中时触发 下面创建一个 Label 和一个 TextEdit,在 TextEdit 中输入的内容,表现到 Label 中:
右键 TextEdit 转到槽,选择 textChanged(),表示文本发送改变就调用这个槽函数,可以让我们在 Label 中实时表现信息:
toPlainText() 表示表现多行输入框中的文本内容
运行步伐,最开始是:
在多行输入框中输入内容,变为:
右键 TextEdit 转到槽,其中 selectionchanged() 和 cursorPositionchanged() 信号,都是采用 QTextCursor 来获取现实的选中的范围和光标移动的位置的
下面是槽函数的书写:
运行步伐:
可以看到在选中内容时,会表现选中的内容,在光标移动时,会表现光标所在的位置
QComboBox
QComboBox 表示下拉框
核心属性:
属性说明currentText当前选中的文本currentindex当前选中的条目下标
从 0开始计算,如果当前没有条目被选中,值为 -1editable是否允许修改
设为 true 时,QComboBox 的行为就非常靠近 QLineEdit, 也可以设置 validatoriconSize下拉框图标(小三角)的巨细maxCount最多允许有多少个条目 核心方法:
方法说明addltem(const QString&)添加一个条目currentindex()获取当前条目标下标
从 0开始计算.如果当前没有条目被选中,值为 -1currentText()获取当前条目标文本内容 核心信号:
信号说明activated(int)
activated(const QString & text)当用户选择了一个选项时发出
这个时间相当于用户点开下拉框,而且鼠标划过某个选项此时还没有确认做出选择 currentIndexChanged(int)
currentIndexChanged(const QString& text)
当前选项改变时发出
此时用户已经明白的选择了一个选项
用户操纵或者通过步伐操纵都会触发这个信号editTextChanged(const QString &text)当编辑框中的文本改变时发出
(editable 为 true 时有效) 模拟麦当劳点餐
在前面学习单选按钮时,也模拟实现过麦当劳点餐,这里使用下拉框的方式,也实现一次麦当劳点餐的结果
下面采用 图形化界面 的方式,创建下面几个控件:
也就是通过下拉框选择后,点击提交,就得到用户获取了哪些食物
接着就可以在构造函数中添加下拉框中的内容:
此时下拉框就可以选择差别的内容了:
接着将提交按钮点击转到槽,实现槽函数:
运行步伐:
上述是通过代码的方式添加的,我们也可以通过图形化界面的方式添加:
输入内容即可:
上述两种方式都可以完成操纵
通过文件加载下拉框内容
下拉框里的内容,很多时间不是代码中写死的,而是通过文件/网络加载数据得到的
例如选课操纵,差别年级的差别的同学,所选择的课程都是不相同的
图形化界面方式创建:
接着我们创建一个文件:
在文件中编写:
接下来需要在构造函数中:读取文件内容,把文件中的每一行读取出来,作为一个ComboBox 的选项
运行步伐:
QSpinBox
使用 QSpinBox 或者 QDoubleSpinBox 表示"微调框”,它是带有按钮的输入框,可以用来输入整数/浮点数,通过点击按钮来修改数值巨细
由于 QSpinBox 或者 QDoubleSpinBox 用法基本相同,区别就是第一个是整数,第二个是小数,下面都先容的是 QSpinBox
核心属性:
属性说明value存储的数值singlestep每次调整的"步长"按下一次按钮数据变化多少displaylnteger数字的进制.例如 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,表示当前的数值 升级版麦当劳点餐
在选择完具体的食物后,后面多一个微调框选择个数
图形化界面的方式创建:
先完善下拉框的内容:
再创建按钮的槽函数:
运行步伐:
点餐时0份是不合理的,100份也是不合理的,所以下面针对 QSpinBox 的范围举行设定:
此时运行步伐默认为1,且份数不会小于1份大于5份:
QDateTimeEdit
- 使用 QDateEdit 作为日期的微调框
- 使用 QTimeEdit 作为时间的微调框
- 使用 QDateTimeEdit 作为时间日期的微调框
这几个控件用法非常相似,我们以 QDateTimeEdit 为例举行先容
核心属性:
属性说明dateTime时间日期的值.形如 2000/1/1 0:00:00date单纯日期的值.形如 2001/1/1time单纯时间的值.形如0:00:00displayFormat时间日期格式.形如 yyyy/M/d H:mm
- y 表示年份
- M 表示月份(M时是1,MM时是01)
- d 表示日期
- H 表示小时
- m 表示分钟
- s 表示秒
留意:这里的格式化符号的含义不要记忆,差别语言/库的设定规则是存在差异的,肯定是用的时间再去查minimumDateTime最小时间日期maximumDateTime最大时间日期timeSpecQt: ocalTime:表现本地时间
Qt::UTC:表现协调世界时(UTC)
Ot::OffsetFromUTC:表现相对于UTC的偏移量(时差) 核心信号:
信号说明dateChanged(QDate)日期改变时触发timeChanged(QTime)时间改变时触发dateTimeChanged(QDateTime)时间日期任意一个改变时触发 时间计算器
计算两个时间中间的间隔是多少天/多少小时
图形化界面的方式创建:
计算的按钮的槽函数实现:
daysTo 和 secsTo:
- daysTo 计算两个时间的日期的差值
- secsTo 计算两个时间的秒数的差值
(seconds / 3600) % 24 的含义是:
- seconds 是一个非常大的数字,表示这两个时间日期中间隔了多少秒
- 起首除以一个 3600,换算成小时了
- 这两个时间中间隔了多少小时,重点是关心多出来的零头
- 好比这里的结果是 100h(包罗好几天了),重点是看这里的零头是多少,也就是 100 % 24
运行步伐:
上述的代码写完,大部门计算结果都是对的,但是照旧有标题的,例如:
1/1 20:00 距离 1/2 0:00 应该是间隔4小时的,而不是1天零4小时,所以需要改正
之所以出现上述情况,是由于我们所使用的 daysTo 函数,它规定如果 从晚上的 23:55 到第二天的 0:05 也是会算作一天的
而我们并不希望这样计算,所以我们也可以使用秒数转化为天数:
运行步伐,结果是符合预期的:
QDial
使用 QDial 表示一个旋钮
有些步伐,通过鼠标拖动旋钮旋转,即可完成一些相关的设置
核心属性:
属性说明value持有的数值minimum最小值maximum最大值singleStep按下方向键的时间改变的步长pageStep按下 pageUp/pageDown 的时间改变的步长sliderPosition界面上旋钮表现的初始位置tracking表面是否会跟踪数值变化
默认值为 true,一般不需要修改wrapping是否允许循环调整
即数值如果凌驾最大值,是否允许回到最小值调整过程能否"套圈")notchesVisible是否表现 刻度线notchTarget刻度线之间的相对位置,数字越大,刻度线越希罕 核心信号:
信号说明valueChanged(int)数值改变时触发rangeChanged(int, int)范围变化时触发 图形化界面的方式创建旋钮:
右边的是否允许套圈和是否表现刻度线都勾选上:
就变为:
上述就是简单的了解这个旋钮的几个属性,下面使用代码的方式学习
下面编写代码,通过旋钮来控制窗口的不透明度(opacity)
- 不透明度数值是一个 0-1 之间的小数
- 1 完全不透明
- 0 完全透明
图形化界面的方式创建旋钮,并通过右边的属性栏设置相关属性:
此时外形为:
下面右键旋钮,转到槽,选择 valueChanged(int) 也就是数值改变时触发信号,槽函数编写如下:
运行步伐,旋钮旋转到50的时间,不透明度变为原来的一半:
QSlider
使用 QSlider 表示一个滑动条
0slider 和 QDial 都是继续自 QAbstractslider,因此用法上基本相同
核心属性:
属性说明value持有的数值minimum最小值maximum最大值singleStep按下方向键的时间改变的步长pageStep按下 pageUp/pageDown 的时间改变的步长sliderPosition滑动条表现的初始位置tracking表面是否会跟踪数值变化
默认值为 true,一般不需要修改orientation滑动条的方向是程度照旧垂直invertedAppearance是否要翻转滑动条的方向(默认从左往右变大)tickPosition刻度的位置tickInterval刻度的密集程度 核心信号:
信号说明valueChanged(int)数值改变时触发rangeChanged(int, int)范围变化时触发 滑动条控制窗口巨细
下面编写代码实现:
在窗口上放两个滑动条,一个是程度,一个是垂直
滑动这两个滑动条,就能够调整窗口的巨细
起首拖动两个滑动条:
先在构造函数中设置两个滑动条的基本属性:
再分别将两个滑动条转到槽,选择 valueChanged(int) 也就是数值改变时触发信号,实现槽函数:
运行步伐,初始巨细如下:
拖动滑动条,变为:
自界说快捷键,通过快捷键来操纵滑动条
滑动条自己可以通过方向键和 pageUp pageDown 操纵,但是我们也可以自界说
图形化界面创建:
转到槽,仍然是 valueChanged(int) 的槽函数:
此时就可以做到拖动滑动条,在标签上表现对应的数值:
下面在构造函数中,为了能够使用快捷键的方式操纵滑动条,需要用到 QShortCut 类:
接下来使用信号槽,感知快捷键被按下,所以需要创建两个槽函数:
接着在构造函数中使用 connect 函数链接信号与槽:
subValue 和 addValue 槽函数实现如下:
此时运行步伐,就可以通过快捷键操纵滑动条了:
Qt常用控件之输入类控件到此竣事啦
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |