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

【Qt学习】QLineEdit 控件 属性与实例(登录界面,验证密码,正则表达式)

文章目录

  • 1. 介绍
  • 2. 实例使用
    • 2.1 登录界面
    • 2.2 对比两次密码是否相同
    • 2.3 通过按钮显示当前输入的密码(并对2.2进行优化)
    • 2.4 结语
  • 3. 正则表达式
    • 3.1 QRegExp
    • 3.2 验证输入内容
  • 4. 资源代码

1. 介绍

关于 QLineEdit 的详细介绍,可以去查阅官方文档,这里简单进行总结:

  1. QLineEdit是Qt框架中的一个类,用于创建单行文本输入框。
  2. 它允许用户输入和编辑单行文本,可以用于接受用户输入的各种数据,比如用户名、密码、搜索关键字等。
  3. QLineEdit提供了一些属性和方法来管理文本输入、校验输入内容以及响应用户操作。

下面是QLineEdit 核心属性

属性描述
text当前文本内容
placeholderText占位符文本,当输入框为空时显示
maxLength最大长度限制
inputMask输入掩码,限制输入格式
readOnly只读状态
alignment对齐方式
validator输入内容验证器
frame是否显示边框
echoMode输入内容显示模式(如密码模式)
cursorPosition光标位置
dragEnabled是否启用拖放
clearButtonEnabled是否显示清除按钮
modified文本内容是否被修改
cursorMoveStyle光标移动样式

根据上面的核心属性:用户可以设置输入框的默认文本、最大长度、输入掩码(用于限制输入格式)、校验器(用于验证输入的合法性)等。


2. 实例使用


2.1 登录界面

  1. 我们首先在Designer下进行如下 布局

在这里插入图片描述

  1. 随后在widget.cpp 中的 构造函数 中对每个输入框进行属性设置:
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 给每个输入框 设置相关属性ui->lineEdit_account->setPlaceholderText("输入账号/用户名"); // 设置默认提示信息ui->lineEdit_account->setClearButtonEnabled(true); // 设置一键删除ui->lineEdit_password->setPlaceholderText("输入密码");ui->lineEdit_password->setClearButtonEnabled(true);ui->lineEdit_password->setEchoMode(QLineEdit::Password); // 将显示模式设置为密码ui->lineEdit_email->setPlaceholderText("输入邮箱");ui->lineEdit_email->setClearButtonEnabled(true);ui->lineEdit_email->setInputMask("XXXXXXXXXXXXXXX.com"); // 设置格式条件
}
  1. 随后对 按钮点击的槽函数 进行编写:
    • 点击提交按钮后,会弹出窗口显示用户的信息:
void Widget::on_pushButton_clicked()
{QString account = ui->lineEdit_account->text();QString password = ui->lineEdit_password->text();QString email = ui->lineEdit_email->text();QString gender = ui->radioButton_male->isChecked() ? "男" : "女";// 创建一个弹出窗口来显示填入的信息QMessageBox msgBox;msgBox.setText("账号/用户名: " + account + "\n"+ "密码: " + password + "\n"+ "邮箱: " + email + "\n"+ "性别: " + gender);msgBox.exec();
}

结果演示:

请添加图片描述


2.2 对比两次密码是否相同

我们一般在网站创建用户,修改密码时,都会有两个密码框,让我们再次确认密码,这里就进行实现:

  1. 我们首先在Designer界面进行如下布局:

在这里插入图片描述

  1. widget.h中进行 槽函数等定义
public:Widget(QWidget *parent = nullptr);~Widget();// 用于比较两文本框内容void comparePwd();private slots:// 按钮槽函数void on_pushButton_clicked();
  1. widget.cpp中在构造函数中设置两文本框属性 + 连接文本框与比较函数:
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 给文本框设置相关模式ui->lineEdit_1->setEchoMode(QLineEdit::Password);ui->lineEdit_1->setClearButtonEnabled(true);ui->lineEdit_2->setEchoMode(QLineEdit::Password);ui->lineEdit_2->setClearButtonEnabled(true);ui->label->setText("密码为空");// 连接文本框的状态 与比较函数,用于实时传出两密码信息connect(ui->lineEdit_1, &QLineEdit::textEdited, this, &Widget::comparePwd);connect(ui->lineEdit_2, &QLineEdit::textEdited, this, &Widget::comparePwd);
}
  1. 随后在widget.cpp 中对上面的函数进行实现:
void Widget::comparePwd()
{// 比较两密码状态const QString& s1 = ui->lineEdit_1->text();const QString& s2 = ui->lineEdit_2->text();if(s1.isEmpty() && s2.isEmpty()){ui->label_prompt->setText("密码为空");ui->pushButton->setEnabled(false);}else if(s1 == s2){ui->label_prompt->setText("两次密码一致");ui->pushButton->setEnabled(true);}else{if (s1.isEmpty()) {ui->label_prompt->setText("第一个密码为空");} else if (s2.isEmpty()) {ui->label_prompt->setText("第二个密码为空");} else {ui->label_prompt->setText("两次密码不一致");}ui->pushButton->setEnabled(false);}
}void Widget::on_pushButton_clicked()
{// 提取密码,弹出对话框显示密码QString Password =  ui->lineEdit_1->text();QMessageBox msgBox;msgBox.setText("您设置的密码为: " + Password);msgBox.exec();
}

对于上面的代码,(void) arg1 的作用:为了避免编译器产生未使用变量的警告。

结果演示:

请添加图片描述


2.3 通过按钮显示当前输入的密码(并对2.2进行优化)

我们在网站中输入密码时,一般允许点击按钮来显示当前密码,这里用一个checkBox(复选框)来进行这样的功能:(在例2.2的前提下继续编写)

  1. 首先添加两个按钮,分别用于 将两文本框的密码可视化

在这里插入图片描述

  1. 分别编写两个按钮的槽函数,我们可以将可视化密码的代码封装为函数,首先在widget.h中添加如下函数:
public:// 可视化密码void togglePasswordVisibility();private slots:// 按钮槽函数void on_checkBox_1_toggled(bool checked);void on_checkBox_2_toggled(bool checked);
  1. 后在widget.cc中对上面函数进行实现:
// 两checkBox 用于显示两文本框中的密码
void Widget::togglePasswordVisibility()
{bool showPassword1 = ui->checkBox_1->isChecked();bool showPassword2 = ui->checkBox_2->isChecked();ui->lineEdit_1->setEchoMode(showPassword1 ? QLineEdit::Normal : QLineEdit::Password);ui->lineEdit_2->setEchoMode(showPassword2 ? QLineEdit::Normal : QLineEdit::Password);comparePwd(); // 每次切换密码可视化状态时重新比较密码
}void Widget::on_checkBox_1_toggled(bool checked)
{togglePasswordVisibility();
}void Widget::on_checkBox_2_toggled(bool checked)
{togglePasswordVisibility();
}

结果演示:

请添加图片描述

2.4 结语

我们可以将登录界面与 后两个例子的内容结合, 完善出一个 “登录界面” 的功能。


3. 正则表达式

正则表达式(Regular Expression):是一种文本模式,用于匹配、搜索和替换文本中的字符串。

下面列举了一些常见的正则表达式内容及其含义:

正则表达式含义
.匹配任意单个字符
^匹配字符串的开头
$匹配字符串的结尾
*匹配前面的字符零次或多次
+匹配前面的字符一次或多次
?匹配前面的字符零次或一次
[]匹配一组中括号中的任意一个字符
[^]匹配除了中括号中指定的字符之外的任意一个字符
()捕获匹配的字符串,以供后续使用

3.1 QRegExp

QRegExp是Qt中用于处理正则表达式的类,它提供了一系列函数用于匹配、搜索和替换文本中的字符串。

  • 下面列举了 QRegExp 类的一些常用接口函数及其作用:
接口函数作用
QRegExp(const QString &pattern)构造函数,使用给定的正则表达式模式初始化 QRegExp 对象
exactMatch(const QString &str)检查给定的字符串是否与正则表达式完全匹配
indexIn(const QString &str, int offset = 0)在给定的字符串中搜索正则表达式的第一个匹配项,并返回其位置
pos()返回最后一次匹配的子串在字符串中的起始位置
matchedLength()返回最后一次匹配的子串的长度
capturedTexts()返回最近一次匹配操作中捕获的所有子串
replace(QString *str, const QString &after)使用给定的字符串替换匹配正则表达式的第一个子串
globalReplace(QString *str, const QString &after)使用给定的字符串替换匹配正则表达式的所有子串

下面进行实例:

3.2 验证输入内容

这里主要用 QRegExp验证 输入框中输入的内容是否合法

比如,验证输入的手机号是否合法:

  1. 首先简单在Designer界面如下布局:

在这里插入图片描述

  1. 在widget.cc的构造函数中写下面的代码:
QRegExp regExp("^1\\d{10}$");

解释: 用于匹配中国大陆手机号码的正则表达式。

  • ^ 表示字符串的开始
  • 1 表示手机号码必须以数字1开头
  • \\d 表示任意数字
  • {10} 表示前面的\d必须出现10次,即手机号码应该是11位数
  • $ 表示字符串的结束

该正则表达式可以匹配所有以数字1开头,且后面跟着10个数字的字符串,符合国内手机号码的格式。

  1. 继续补充代码:
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QRegularExpression regExp("^1\\d{10}$");QValidator *validator = new QRegularExpressionValidator(regExp, this);ui->lineEdit_number->setValidator(validator);
}

解释:

  • QValidator 是 Qt 提供的用于验证用户输入的基类,QRegExpValidatorQValidator 的子类,用于基于正则表达式对用户输入进行验证。
  1. 随后直接对 文本框 进行槽函数的编写

    • textEdited用于相应文本框中的变化,texdtChangedtextEdited 两者功能类似:
      在这里插入图片描述
  2. 在槽函数中编写 验证的代码:


void Widget::on_lineEdit_number_textEdited(const QString &arg1)
{QString content = text; // 获取文本框内容int pos = 0;if(ui->lineEdit_number->validator()->validate(content, pos) == QValidator::Acceptable)ui->pushButton_verify->setEnabled(true);elseui->pushButton_verify->setEnabled(false);
}

对于if语句中的内容:

这行代码是在检查用户输入的内容是否符合 QLineEdit 中设置的验证器(validator)的要求。具体来说,这行代码做了以下操作:

  1. ui->lineEdit_number->validator():获取 QLineEdit 中设置的验证器对象。
  2. validate(content, pos):通过验证器对给定的 content 内容进行验证,pos 是一个输出参数,表示验证通过后的位置信息。
  3. QValidator::Acceptable:表示验证器接受(Acceptable)给定的内容。

因此,整个条件判断的含义是:如果用户输入的 content 内容经过 lineEdit_number 的验证器验证后被认为是可接受的(Acceptable),则条件成立。

结果演示:

请添加图片描述

4. 资源代码

上文中涉及的所有代码等资源👇:

2.1 QLineEdit的使用 - 简单的登录界面
2.2 / 2.3 QLineEdit的使用 - 密码验证
3.1 QLineEdit的使用 - 正则表达式与QRegExp

相关文章:

【Qt学习】QLineEdit 控件 属性与实例(登录界面,验证密码,正则表达式)

文章目录 1. 介绍2. 实例使用2.1 登录界面2.2 对比两次密码是否相同2.3 通过按钮显示当前输入的密码(并对2.2进行优化)2.4 结语 3. 正则表达式3.1 QRegExp3.2 验证输入内容 4. 资源代码 1. 介绍 关于 QLineEdit 的详细介绍,可以去查阅官方文…...

Spring Boot 和 Spring Cloud: 区别与联系

Spring Boot 和 Spring Cloud: 区别与联系 在当今软件开发领域,微服务架构和快速开发成为了主流趋势。Spring框架作为Java生态系统中最流行的开发框架之一,也不例外地推出了Spring Boot和Spring Cloud这两个项目来满足这些需求。本文将详细探讨它们之间…...

9.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏连接服务器的操作

内容参考于:易道云信息技术研究院VIP课 上一个内容:游戏底层功能对接类GameProc的实现 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:44c54d30370d3621c1e9ec3d7fa1e2a0…...

vue - - - - - vue3使用draggable拖拽组件

vue3使用draggable拖拽组件 一、组件安装二、插件使用三、遇到的问题1. missing required prop&#xff1a; “itemKey” 一、组件安装 yarn add vuedraggablenext // or npm i -S vuedraggablenext二、插件使用 <template><draggableitem-key"id"class&q…...

PHP语言常见面试题:请解释一下PHP是什么,以及它的主要用途是什么?

PHP&#xff0c;英文全称为Hypertext Preprocessor&#xff0c;中文名称为“超文本预处理器”。它是一种通用的开源脚本语言&#xff0c;特别适用于Web开发领域。PHP最初是由Rasmus Lerdorf在1995年创建的&#xff0c;并且自那时以来&#xff0c;它已经发展成为一个功能强大且易…...

Unity(第六部)向量的理解和算法

标量:只有大小的量。185 888 999 &#xff08;类似坐标&#xff09; 向量:既有大小&#xff0c;也有方向。&#xff08;类似以个体为主体的方向&#xff0c;前方一百米&#xff09; 向量的模:向量的大小。&#xff08;类似以个体为主体的方向&#xff0c;前方一百米、只取一百米…...

TypeScript+React Web应用开发实战

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在现代Web开发中&#xff0c;React和TypeScrip…...

android开发电子书,android基础编程

内存泄漏是什么&#xff1f; 内存泄漏即 ML &#xff08;Memory Leak&#xff09; 指 程序在申请内存后&#xff0c;当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象 内存泄漏有哪些情况&#xff0c;对应的解决方案&#xff1f; 内存泄漏的原因归根到底就是当需…...

2024-02-25 Unity 编辑器开发之编辑器拓展6 —— Event

文章目录 1 Event 介绍2 重要 API3 代码示例 1 Event 介绍 ​ Event 提供许多属性和方法&#xff0c;允许检查和处理用户输入&#xff0c;主要用于 Unity 编辑器拓展开发。 ​ Input 相关内容需要在运行时才能监听输入&#xff0c;而 Event 专门提供给编辑模式下使用&#xf…...

DC-DC降压芯片用于直流充电桩,具备3A的输出电流能力,输入电压6~40VDC——D2576

随着新能源汽车的不断普及&#xff0c;如何解决新能源车充电的问题也成为大热话题&#xff0c;充电桩的数量与质量也是目前急需提升的热门方面&#xff0c;现阶段人们需要的充电桩主要有交流充电桩和直流充电桩&#xff0c;直流充电桩因其节能效率高、功率因数高、充电快、逐渐…...

4-如何进行细分市场的分析-02 细分行业的构成和基本情况

如何快速摸清行业的构成&#xff0c;通常会看同行或自己做过的相似的行业&#xff0c;会根据不同的行业来采用不同的研究方法。对于成熟的行业和不同的行业都会有一些比较通用的研究方式。 假设我们是在分析某一个行业&#xff0c;在分析行业的时候它的本质还是市场分析&#…...

L1-023 输出GPLT(PTA)

文章目录 输出GPLT题目描述代码 输出GPLT 题目描述 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序&#xff0c;按GPLTGPLT…这样的顺序输出&#xff0c;并忽略其它字符。当然&#xff0c;四种字符&#xff08;不区分大小写&#xff09;的个数不…...

【JavaEE进阶】 Spring AOP快速上手

文章目录 &#x1f343;什么是AOP&#x1f333;什么是Spring AOP&#x1f334;上手Spring AOP&#x1f6a9;引入依赖&#x1f6a9;编写AOP程序 ⭕总结 &#x1f343;什么是AOP AOP是Aspect Oriented Programming的简称&#xff08;又称为面向切⾯编程&#xff09; 什么是面向…...

android应用开发基础知识,安卓面试2020

第一章&#xff1a;设计思想与代码质量优化 1、设计思想六大原则 2、三大设计模式 3、数据结构 4、算法 第二章&#xff1a;程序性能优化 1、启动速度和执行效率优化 2、布局检测与优化 3、内存优化 4、耗电优化 5、网络传输与数据存储优化 6、APK大小优化 7、屏幕适配 8、…...

unity-unity2d基础操作笔记(一)0.5.0

unity2d基础操作笔记 一、如何查看当前系统的输入设置二、如何获取水平或者垂直的输入的代码三、如何获取当前人物的x和y的值三、如何简单写出控制人物水平移动的代码四、如何设定游戏的帧率五、如何控制渲染顺序六、如何调整摄像机摄像范围大小七、如何对Hierachy中的图进行分…...

东芝工控机维修东芝电脑PC机维修FA3100A

TOSHIBA东芝工控机维修电脑控制器PC机FA3100A MODEL8000 UF8A11M 日本东芝TOSHIBA IA controller维修SYU7209A 001 FXMC12/FXMC11;BV86R-T2GKR-DR7YF-8CPPY-4T3QD; CPU处理单元是可编程逻辑控制器的控制部分。它按照可编程逻辑控制器系统程序赋予的功能接收并存储从编程器键入…...

AI新秀Mistral:“Open AI“ 新时代

最近互联网出现不少类似“下一代openai”、“GPT-4最强竞品”、“法国AI独角兽”、“欧洲的OpenAI”、“微软新宠儿”.... 的文章&#xff0c;都会附带一张图片&#xff0c;就是下面这张&#xff1a; 那么到底发生了什么&#xff0c;出来个什么东西呢&#xff1f;就是本文的主…...

Dockerfile制作镜像

Dockerfile制作镜像 Dockerfile介绍 dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了一条条构建镜像所需的指令和说明。 dockerfile仅仅是用来制作镜像的源码文件&#xff0c;是构建容器过程中的指令&#xff0c;docker能够读取dockerfile的指定进行自动…...

如何在宝塔面板中设置FTP文件传输服务并实现远程文件管理

文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能&#xff0c;用于设置和管理FTP服务。通过宝塔FTP&#xff0c;用户可以创建FTP账号&#xff0c;配置FTP用户权限…...

记录 | 设置容器内外时间一致

1.共享主机的localtime 创建容器的时候指定启动参数&#xff0c;挂载localtime文件到容器内&#xff0c;保证两者所采用的时区是一致的 docker run -ti -d --name my-nginx -v /etc/localtime:/etc/localtime:ro docker.io/nginx /bin/bash 2.复制主机的localtime docker …...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...