【Qt】输入类控件:QLineEdit、QTextEdit、QComboBox、QSpinBox、QDateTimeEdit、QDial、QSlider

目录

QLineEdit

例子:

正则表达式对象、验证器对象

例子:

 例子:

QTextEdit

例子:

QComboBox

例子:

QSpinBox

例子:

QDateTimeEdit

例子:

QDial

例子:

QSlider

例子:


QLineEdit

表示单行输入框,可以输入一段文本,不可以换行。

核心属性(可以通过代码方式设置,也可以通过界面方式设置这些属性):

text:输入框的文本。

inputMask:输入文本的格式约束。

maxLength:输入文本的最大长度。

frame:边框。

echoMode:文本的显示方式。

QLineEdit::Normal:QLineEdit的默认文本显示方式。输入框会显示输入的文本。

QLineEdit::Password:输入框会隐藏的输入的文本,通常用*或=代替已输入的文本。

QLineEdit::NoEcho:输入框不会显示输入的文本。

cursorPosition:光标所

alignment:文本对齐方式

dragEnabled

readOnly:文本是否是只读的。

clearButtonEnabled:输入框不为空时,是否显示"清除按钮"。

placeholderText:placeholder:(替代缺失部分的)占位符。输入框为空时,输入框中是否显示占位符文本。

核心信号:

void selectionChanged():当选中的文本发生变化时,发出此信号。

void textChanged(const QString& text):当单行输入框中的文本发生改变时发出此信号,参数text是新文本。代码对文本的修改触发此信号。

void testEdited(const QString& text):当单行输入框中的文本发生改变时发出此信号,参数text是新文本。代码对文本的修改不能触发此信号。

例子:

录入个人信息,包括:账号、密码、性别、电话(11位数字),点击确定按钮录入的用户信息打印出来。

正则表达式对象、验证器对象

由于QLineEdit中inputMask属性只能进行简单的输入格式校验,因此可以使用正则表达式正则表达式是使用特殊字符描述一个字符串特征的机制。

正则表达式对象

QRegExp,创建正则表达式对象:

QRegExp regexp("^1\\d{10}$");其中^1表示以数字1开头,\\d{10}表示任意10个十进制数字(c++中为方式转义字符因此多加上一条反斜杠\)

验证器对象

QValidator,Qt中提供了4种验证器对象都是继承自QValidator。

QRegExpValidator

创建验证器对象:

最经常使用的就是QRegExpValidator,即通过正则表达式对象构造验证器对象。

QRegExpValidator validator(QRegExp("^1//d{10}$"));

例子:

当单行输入框中的文本内容符合条件确定按钮才可用。

QLineEdit中设置验证器的方法:

我们利用QLineEdit的信号textChanged(textEdited也可以),只要输入框中的文本发生变化,该信号就会发出,且该信号的参数就是此时输入框中的文本内容,在该信号的槽函数我们使用QLineEdit中的validator()方法获取单行输入框的验证器,然后调用QValidator中的validate(QString&,int&)方法,通过该方法的返回值进行判断输入的文本是否符合条件。

参数:

input:是此时输入框中的文本内容,输出型参数。

pos:是输入框中的文本字符个数,输出型参数。

返回值:

QValidator::Acceptable:表示输入框中的文本符合条件。

QValidator::Invalid:不符合。

注意:validate的参数类型是QString&是没有加const的引用,因此不能直接将信号函数(信号和槽中的一个知识:当信号发出时,信号函数会将其参数传递给对应的槽函数)的参数传给validate方法,因此我们要在槽函数中重新定义一个QString对象,将这个对象传给validate方法。

我们可以在Widget声明一个QRegExgValidator*类型的成员变量,在构造函数中new一个正则表达式验证器,然后不用给单行输入框创建验证器,在~Widget中释放该验证器的内存控件,可以吗?

可以是可以但是与上面的实现是有差别的。

差别:没有正则表达式对象的限制,这种方法的输入框中的文本字符个数没有限制。而上面的方法中是有字符限制的(因为上面的方法是将正则表达式验证器设置到了输入框中),字符限制是正则表达式对象中的限制。

 例子:

验证两次输入的密码是否一致只有两次输入的密码一致确认按钮才可以使用,并且标签控件上会显示两次密码输入的状况。

当第一个或第二个输入框中的内容改变时两个输入框都会发出信号,然后在槽函数进行实现。

例子:

切换显示密码

这里使用了toggled信号,也就是当按钮的从未选中切换到选中,或从选中切换到未选中都会发出此信号。

QTextEdit

表示多行输入框。输入的文本内容可以进行换行,并且能在文本内容超出编辑框范围时自动提供滚动条。

核心属性:

markdown:输入框内持有的内容,支持markdown格式,能够自动的将markdown文本渲染成html。

html:输入框内持有的内容,支持大部分html标签,包括img、table等。

placeholderText:输入框为空时提示的信息。

readOnly:文本框中的内容是否只读的。

undoRedoEnabled:是否开启undo和redo功能。ctrl+z:undo   ctrl+y:redo

autoFormatting:文本开启自动格式。

verticalScrollBarPolicy:scroll:滚动。垂直方向滚动条的出现策略。

Qt::ScrollBarAsNeed   根据需要出现滚动条

Qt::ScrollBarAlwaysOff   总是出现滚动条

Qt::ScrollBarAlwaysOn  总是不出现滚动条

horizontalScrollBarPolicy:水平方向滚动条的出现策略。

核心信号:

textChanged():文本内容改变时触发。

selectionChanged():选中的文本范围改变时触发。

cursorPositionChanged():光标在输入框中的位置改变时触发。

undoAvailable(bool):当undo可用时触发。

redoAvailable(bool):当redo可用是触发。

copyAvailable(bool):文本被选中或取消选中时触发。信号的参数表示此时是否选中文本内容。

例子:

同步多行输入框的文本内容到标签中

注意:获取多行文本输入框的文本要使用toPlainText()这方法和之前的都不同,QTextEdit还提供了toHtml()和toMardown(),

QComboBox

表示下拉框。

核心属性:

currentText:当前选中的文本。

currentIndex:当前选中的条目下标。

editable:是否允许修改条目文本,如果为true则相当于一个QLineEdit可以为其设置一个验证器。

iconSize:下拉框头标(小三角)的大小。

maxCount:允许有多少个条目。

核心方法:

addItem(const QString&):添加一个条目。

currentText():获取已选中条目的下标,下标从0开始,如果没有选中任何条目则下标默认时-1。

currentIndex():获取已选中条目的内容。

例子:

从文件中加载下拉框的选项

注意:

1、将QString转换为string的方法:QString qs; string s = qs.toStdString();

2、将string转转换位QString的方法:string s; QString qs = QString::fromStdString(s);

QSpinBox

QSpinBox和QDoubleSpinBox是带有按钮的"微调框",可以设置int类型/double类型的数,通过点击按钮进行调整框内的数值。

QSpinBox和QDoubleSpinBox用法相同这里介绍QSpinBox。

核心属性:

value:框内的数值。

singleStep:每次调整的步长,点击一次按钮数值变化多少。

displayInteger:设置的进制。比如:设置为10则微调框中的数值将按十进制表示;设置为2则按二进制表示。

minimum:最小值;

maximum:最大值。

prefix:前缀。

suffix:后缀。

wrapping:是否允许换行。

frame:是否带边框。

alignment:文字对齐方式。

readOnly:是否允许修改。

buttonSymbol:按钮上的样式。

UpDownArrows:上下箭头、PluxMinus:加减号、NoButtons:无按钮

accelerated:按下按钮是否为快速调整模式。

correctionMode:修正方式。

keyboardTrack:是否开启键盘跟踪。

设为true:每次在输入框设输入一个数字时,都会触发valueChanged()和textChanged()信号。

设为false:只有在按下enter键或输入框失去焦点时才触发valueChanged()和textChanged()信号。

例子:

设置一个购买零食界面,只要用户选择任意一种零食的份数大于0即可点击确认按钮。

QDateTimeEdit

日期时间微调框,还有其他两个QDateEdit、QTimeEdit,这里只是介绍QDateTimeEdit。

核心属性:

dateTime:日期时间值。

date:日期值。

time:时间值。

displayFormat:日期时间格式。

核心信号:

dateChanged(const QDate&):日期改变时触发。

timeChanged(const QTime&):时间改变时触发。

dateTimeChanged(const QDateTime&):日期或时间任意一个改变时触发。

例子:

实现日期计算器

使用QDate中的secsTo方法得到两个日期时间之间的秒数差:

同样的可以使用daysTo方法得到两个日期时间之间的天数差:

注意:对于QDateTime中的daysTo(const QDateTime&),计算的天数值是受时间影响的,如果要计算两个日期时间之间的小时差(上面的例子要求的值),是不准确的。应该使用secsTo方法,然后通过运算求得。

将int类型转换为QString类型的方法:QString::number(int)

QDial

 dial:刻度盘。这里的QDial是旋钮。

核心属性:

value:当前数值。

maximum

minimum

singleStep:按下方向键改变数值步长。

pageStep:按下png up或png down该变得数值步长。

sliderPosition:按钮的初始位置。

tracking:旋钮移动是否导致数值连续实时变化。

wrapping:是否允许循环调整。

notchesVisible:notches是否显示刻度线。

notchTarget:刻度线之间的相对距离,数字越大刻度线越稀疏。

核心信号:

valueChanged(int):数值变化是触发。

rangeChanged(int,int):范围变化是触发。

例子:

调整窗口透明度

 

QSlider

滑动条控件

QSlider和QDial都是继承自QAbstractSlider,因此大部分属性都与QDial相似,下面只列出与QDial不相似的属性:

核心属性:

orientation:orientation:方向。滑动条的方向时水平还是垂直的。

invertedApperance:是否翻转滑动条的滑动方向。

tickPosition:刻度的位置。

tickInterval:刻度的密集程度。

核心信号:

valueChanged(int):滑动条的数值内容改变时。

rangeChanged(int,int):数值范围改变时。

例子:

通过改变滑动条的值来改变窗口的尺寸。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS应用开发】购物商城的实现【合集】

目录 😋环境配置:华为HarmonyOS开发者 📺演示效果: 📖实验步骤及方法: 1. 在src/main/ets文件中创建components文件夹并在其中创建Home.ets和HomeProduct.ets文件。​编辑 2. 在Home.ets文件中定义 Ho…

智能体实战(需求分析助手)二、需求分析助手第一版实现(支持需求提取、整理、痛点分析、需求分类、优先级分析、需求文档生成等功能)

基于提供的调用 qwen-plus 大模型的实战代码,我将对需求分析助手的第一迭代功能目标进行实现设计。以下是基于该示例代码的第一迭代功能实现细化方案: 功能 1:用户与需求分析助手交互界面(文本交互) 实现步骤&#xf…

Deepin/Linux clash TUN模式不起作用,因网关导致的问题的解决方案。

网关导致的问题的解决方案 查看路由 ip route寻找默认路由 默认路由应当为Mihomo default dev Mihomo scope link 如果不是,则 sudo ip route add default dev Mihomo在clash TUN开关状态发生变化时,Mihomo网卡会消失,所以提示找不到网卡…

malloc 分配大堆块(128KB)的一次探索

前言 一次意外执行了 malloc(0x5000)&#xff0c;结构使用 gdb 调试发现其分配的位置在 TLS 区域&#xff0c;这令我不解&#xff08;&#xff1a;最后去看了下 malloc 源码和 mmap 源码实现&#xff0c;发现似乎可能是 gdb 插件的问题&#xff0c;乐 场景复现 #include <…

大数据机器学习算法和计算机视觉应用07:机器学习

Machine Learning Goal of Machine LearningLinear ClassificationSolutionNumerical output example: linear regressionStochastic Gradient DescentMatrix Acceleration Goal of Machine Learning 机器学习的目标 假设现在有一组数据 x i , y i {x_i,y_i} xi​,yi​&…

【玩转OCR | 腾讯云智能结构化OCR在图像增强与发票识别中的应用实践】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 引言 图像增强API调用实践1. API选择与参数设置2. 在线调试与结果分析3. 响应结果具体实现代码 发票…

android studio更改应用图片,和应用名字。

更改应用图标&#xff0c;和名字 先打开AndroidManifest.xml文件。 更改图片文件名字&#xff08; 右键-->构建-->重命名&#xff08;R&#xff09;&#xff09;

Git(11)之log显示支持中文

Git(11)之log显示支持中文 Author&#xff1a;Once Day Date&#xff1a;2024年12月21日 漫漫长路有人对你微笑过嘛… 参考文档&#xff1a;GIT使用log命令显示中文乱码_gitlab的log在matlab里显示中文乱码-CSDN博客 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSD…

代理模式(JDK,CGLIB动态代理,AOP切面编程)

代理模式是一种结构型设计模式&#xff0c;它通过一个代理对象作为中间层来控制对目标对象的访问&#xff0c;从而增强或扩展目标对象的功能&#xff0c;同时保持客户端对目标对象的使用方式一致。 代理模式在Java中的应用,例如 1.统一异常处理 2.Mybatis使用代理 3.Spring…

猪猪软件库

猪猪软件库&#xff0c;汇聚各类宝藏软件&#xff0c;宛如一座数字百宝箱。这里涵盖了实用工具、趣味游戏、高效办公软件等丰富资源&#xff0c;满足不同用户的多样需求。界面简洁直观&#xff0c;搜索便捷流畅&#xff0c;能让你迅速定位心仪软件。 所有资源都经过严格筛选&a…

端到端自动驾驶大模型:视觉-语言-动作模型 VLA

模型框架定义、模型快速迭代能力是考查智驾团队出活能力的两个核心指标。在展开讨论Vision-Language-Action Models(VLA)之前&#xff0c;咱们先来讨论端到端自动驾驶大模型设计。 目录 1. 端到端自动驾驶大模型设计 1.1 模型输入设计 1.2 模型输出设计 1.3 实现难点分析 …

Swin transformer 论文阅读记录 代码分析

该篇文章&#xff0c;是我解析 Swin transformer 论文原理&#xff08;结合pytorch版本代码&#xff09;所记&#xff0c;图片来源于源paper或其他相应博客。 代码也非原始代码&#xff0c;而是从代码里摘出来的片段&#xff0c;配上简单数据&#xff0c;以便理解。 当然&…

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读

LLMs之rStar&#xff1a;《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读 导读&#xff1a;这篇论文提出了一种名为rStar的自我博弈互推理方法&#xff0c;用于增强小型语言模型 (SLMs) 的推理能力&#xff0c;无需微调或依赖更强大的模型。rStar…

CS 144 check5: down the stack (the network interface)

Lectures Note 略 Exercises TCP片段传输到对等方的过程&#xff1a; TCP-in-UDP-in-IP. Linux 提供了一种接口&#xff08;即“数据报套接字”&#xff0c;UDPSocket&#xff09;&#xff0c;它允许应用程序仅提供用户数据报的有效载荷和目标地址&#xff0c;而内核则负责…

Llama 3 模型系列解析(一)

目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练&#xff08;Over-training&#xff09; 3. 计算训练预算 4. 如何逐步估算和确定最优模型&#xff1f; 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…

越疆科技营收增速放缓:毛利率未恢复,持续亏损下销售费用偏高

《港湾商业观察》施子夫 12月13日&#xff0c;深圳市越疆科技股份有限公司&#xff08;以下简称&#xff0c;越疆科技&#xff0c;02432.HK&#xff09;发布全球发售公告&#xff0c;公司计划全球发售4000万股股份&#xff0c;其中3800万股国际发售&#xff0c;200万股香港公开…

微信小程序实现画板画布自由绘制、选择画笔粗细及颜色、记录撤回、画板板擦、清空、写字板、导出绘图、canvas,开箱即用

目录 画板创建canvas绘制及渲染画笔粗细功能实现画笔颜色选择画笔痕迹撤回、板擦、画布清空canvas解析微信小程序中 canvas 的应用场景canvas 与 2D 上下文、webgl 上下文的关系图像的加载与绘制说明代码说明画板创建 canvas绘制及渲染 在wxml添加对应的canvas标签代码,并在j…

混合精度训练说明

什么是混合精度训练&#xff1f;混合精度训练有什么用&#xff1f; 这里总结一下。 本文总结自kapathy的build gpt2 通常在训练过程中&#xff0c;model里面的数据默认都是torch.float32类型&#xff0c; 也就是用32bit的float型数据表示变量。 比如特征提取中提取的特征&…

draw.io 导出svg图片插入word后模糊(不清晰 )的解决办法

通常我们将图片从draw.io导出为svg格式后插入word, 会发现字体不清晰&#xff0c;特别是使用宋体时&#xff0c;折腾了半天&#xff0c;得到如下办法&#xff1a; 方法1: 在draw.io中导出pdf文件&#xff0c;使用 PDF转SVG转换器 - SVGConverter 将其转换为svg, 完美呈现。 …

ARM学习(38)多进程多线程之间的通信方式

ARM学习(38)ARM学习(38)多进程多线程之间的通信方式 一、问题背景 笔者在调试模拟器的时候,碰到进程间通信的问题,一个进程在等另外一个进程ready的时候,迟迟等不到,然后通过调试发现,另外一个进程变量已经变化了,但是当前进程变量没变化,需要了解进程间通信的方式…