当前位置: 首页 > news >正文

57常用控件_QLineEdit的属性

目录

代码示例: 录入个人信息

代码示例:使用正则表达式验证输入框的数据

代码示例:验证两次输入的密码一致

代码示例: 切换显示密码


QLineEdit ⽤来表⽰单⾏输⼊框. 可以输⼊⼀段⽂本, 但是不能换⾏
核⼼属性
属性说明
text输入框中的文本
inputMask输入内容格式约束
maxLength最大长度
frame是否添加边框
echoMode显示方式:
• QLineEdit::Normal:这是默认值,⽂本框会显⽰输⼊的⽂本。
• QLineEdit::Password :在这种模式下,输⼊的字符会被隐藏,
通常⽤星号(*)或等号(=)代替。
• QLineEdit::NoEcho :在这种模式下,⽂本框不会显⽰任何输⼊
的字符。
cursorPosition光标所在位置
alignment文字对齐方式(水平/垂直方向)
dragEnabled是否允许拖拽
readOnly是否只读(不允许修改)
placeHolderText输入框为空时的提示信息
clearButtonEnabled是否显示"清除按钮"
核⼼信号
信号说明
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是新的文本。代码对文本的修改不能触发这个信号。
这个text属性不仅仅可以通过代码来设置,用户在输入框中进行编辑,也会影响到text值的变化~~
1)通过代码中设置text,界面上的文本会发生改变.
2)直接操作修改界面上的文本(输入框,可以编辑的),text属性的值也会发生改变。
很多网站,输入框里都是会限制字数的~~
placeHolderText
placeHolder可以起到“提示作用”
当输入框为空的时候,没有任何内容的时候,提示信息才会存在~~
一旦用户在这里进行任何动作输入
这个提示信息就没了~~

clearButtonEnabled
如果输入框为空,此时没有任何的显示
当输入框有内容的时候,右侧就会出现一个删除
一旦用户在输入框中输入内容了~~
会出现按钮,点击按钮就能立即把输入框的所有内容给
清空掉~~

代码示例: 录入个人信息


1)在界面上创建三个输入框和两个单选按钮,一个普通按钮
三个输入框的 objectName 为 lineEdit name,lineEdit password
lineEdit_phone
两个单选按钮的 objectName 为 radioButton_male ,radioButton_female
按钮的 objectName 为 pushButton
2)编写 widget.cpp,在构造函数中编写初始化代码
3) 继续修改 widget.cpp, 给按钮添加 slot 函数
4) 执⾏程序, 可以看到, 随着用户输⼊内容之后, 点击按钮, 就能打印到输⼊的信息

 inputMask 只能进行简单的输入格式校验
实际开发中,基于正则表达式的方式是更核心的方法

inputMask功能比较有限,只能进行简单的验证.
就需要使用“正则表达式”
计算机中的通用概念,和具体的编程语言无关


正则表达式,本质上就是一个带有特殊字符的字符串.特殊字符用来表示另一个字符串的特征。
此时就可以借助正则表达式来描述出一些具有一定特点的字符串,
基于这些特点,就可以完成字符串的匹配~~

代码示例:使用正则表达式验证输入框的数据


此处要求在输入框中输入一个合法的电话号码(1 开头,11位全都是数字)如果验证不通过,则确定按钮
无法点击。

关于正则表达式
正则表达式是一种在计算机中常用的,使用特殊字符描述一个字符串的特征的机制.在进行字
符串匹配时非常有用
正则表达式的语法还比较复杂,一般都是随用随查,不需要背下来

参考:
正则表达式⽂档https://learn.microsoft.com/zh-cn/previousversions/visualstudio/visual-studio-2008/ae5bf541(v=vs.90)?redirectedfrom=MSDN
正则表达式在线⼯具
https://regextester.buyaocha.com/
1) 在界⾯上创建输⼊框和⼀个按钮.
此处的规则是,输入框要检查输入的内容是否是合法的手机号码,
如果是,则按钮设为可用状态,
如果不是,则设为禁用状态
2)编写 widget.cpp,把按钮初始 enabled 设为 false.给输入框添加验证器
使用 QRegExp 创建一个正则表达式对象"^1\\d{10}$” 表示"以1开头,后面跟上任意的10
个十进制数字"
使用 QRegExpValidator 创建一个验证器对象,Qt中内置了四个主要的验证器对象

QRegularExpressionValidator 在匹配性能上做出了⼀定优化. 但是从使⽤⻆度讲, 和 QRegExpValidator 差别不⼤. 我们使⽤ QRegExpValidator 即可

 

3)编写 widget.cpp,给 LineEdit 添加 textEdited 信号的 slot函数
on_lineEdit_textEdited 的参数是当前输入框的内容
通过 LineEdit->validator() 获取到内置的验证器
通过 validate 方法验证文本是否符合要求
●第一个参数填写的是要验证的字符串由于参数要求是 string& 而不是 const
QString&,需要把这个变量复制一下
●第二个参数是一个int&,是输出型参数当验证的字符串不匹配时,返回这个字符串的长度.(没有
啥实质作用).
●返回值是一个枚举,QValidator::Acceptable 表示验证通过
QValidator::Invalid 表示验证不通过

\\d:表示数字(\\不转义,\转义)

4)执行程序,观察效果可以看到此时尝试输入字母是无法输入的.并且只有当输入的内容符合要求,确
定按钮才能被使用

 “^1\\d{10}$"
这是一个简单的验证手机号码的正则表达式
^表示以 xxx 开头.
^后面跟着的1,意思就是以1开头
\d表示数字,为了在C++字符串中使用,需要写作\\d
{10}表示前面的内容重复出现10次.\d数字要重复出现10次.
$表示结尾了.

QRegExp regExp("^1\\d{10}$");
ui->lineEdit->setValidator(new QRegExpValidator(regExp));
只是注册一个验证器,具体验证器怎么使用,还需要写其他代码来完成~~


验证输入框的内容,是否合法.
只要输入框中的内容发生改变了,验证操作就应该被执行~~

State validate(QString&, int&)
第一个参数,是要验证的字符串.参数类型是QString&
不是 const !!!

第二个参数,如果你的字符串不符合规则,是从哪个位置开始不符合的~~
程序员可以自定义一个Validator,重写validate函数.
刚才用的 RegExpValidator 是 Qt 内置的.

代码示例:验证两次输入的密码一致


1)在界面上创建两个输入框和一个 label

2) 编写代码, 设置两个输⼊框的 echoMode Password

3) 给两个输⼊框设置 textEdited slot 函数

(void)arg1;骗过编译器

 

 

相同的逻辑可以写在一个函数里compare()

4) 执⾏程序, 观察效果.
可以看到当两个输⼊框内的密码相同时, 就会提⽰密码相同
验证两次输入的密码是否一致.
使用textEdited信号,来触发对于两个输入框内容的判定~~
QString &arg
△ unused parameter 'arg1'
警告不处理也是完全可以的,
以后在公司中,有的团队可能要求,把警告当成错误一样处理~~
(void) arg1;
这个写法就是类型转换
这个写法对于代码的实际逻辑是没有任何影响的。
同时可以“骗过”编译器,警告就没了~~

代码示例: 切换显示密码

1) 创建⼀个输⼊框和⼀个复选按钮
2) 修改 widget.cpp, 设置输⼊框的 echoMode Password
3) 修改 widget.cpp, 给 checkBox 添加 slot 函数
4) 执⾏程序, 可以看到切换复选框的状态, 就可以控制输⼊框显⽰密码

http://www.xdnf.cn/news/163621.html

相关文章:

  • 使用css修饰网页元素
  • 聚合分销系统开发:短剧小说外卖网盘电商cpscpa系统
  • PCL点云处理之基于FPFH特征的SAC-IA全局配准算法 (二百四十六)
  • 基于javaweb的SpringBoot小说阅读系统设计与实现(源码+文档+部署讲解)
  • Unity网络编程入门:掌握Netcode for GameObjects实现多人游戏基础(Day 39)
  • dubbo 隐式传递
  • MATLAB 2022a 部分讲解
  • 类和对象(下)
  • 综述类论文读后报告——重庆大学《深度学习在人类活动识别中的应用综述》
  • 16. LangChain自主智能体(Autonomous Agent):模拟人类工作流的进阶设计
  • 4.26-count部分的渲染
  • 参考平面的宽度-信号与电源完整性分析
  • 云原生--核心组件-容器篇-3-Docker核心之-镜像
  • 考研系列-计算机组成原理第四章、指令系统
  • 012组合数学——算法备赛
  • [创业之路-390]:人力资源 - 社会性生命系统的解构与重构:人的角色嬗变与组织进化论
  • 前端职业发展:如何规划前端工程师的成长路径?
  • RAG技术解析:以Text2SQL为例看检索增强生成的全流程应用
  • 第1章 基础知识
  • brew 安装openjdk查看其版本
  • 一文了解TOGAF 认证考试,如何选择科目?
  • ROS 快速入门教程05
  • 如何保证线程安全(含典型手段与应用场景)
  • Maven插件下载失败?三步解决SSL握手错误与镜像配置
  • 【蓝桥杯省赛真题56】Scratch抓不住的蜜蜂 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • 72.评论日记
  • CMCC RAX3000M CH EC 算力版刷机(中国移动 RAX3000M 算力版)刷机
  • 大模型的使用
  • 2025年暨南大学 ACM校赛分析与题解
  • 二、UI自动化测试02--元素定位方法