【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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[计算机网络]--IP协议

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、IP协议…

202432读书笔记|《泰戈尔的诗》——什么事让你大笑,我生命的小蓓蕾

202432读书笔记|《泰戈尔的诗》——什么事让你大笑,我生命的小蓓蕾 《泰戈尔写给孩子的诗(中英双语版)》作者拉宾德拉纳特泰戈尔文 张王哲图,图文并茂的一本书,文字与图画都很美,相得益彰!很值得…

【Memory协议栈】EEPROM Abstraction模块详细介绍

目录 前言 正文 1.功能简介 2.关键概念 3.功能详解 3.1 Addressing scheme and segmentation 3.2 Address calculation 3.3 Limitation of erase / write cycles 3.4 Handling of “immediate” data 3.5 Managing block consistency information 4.关键API定义 4.…

学习磁盘管理

文章目录 一、磁盘接口类型二、磁盘设备的命名三、fdisk分区四、自动挂载五、扩容swap六、GPT分区七、逻辑卷管理八、磁盘配额九、RAID十、软硬链接 一、磁盘接口类型 IDE、SATA、SCSI、SAS、FC(光纤通道) IDE, 该接口是并口。SATA, 该接口是串口。SCS…

golang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

K8S部署Java项目(Gitlab CI/CD自动化部署终极版)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

websocket入门及应用

websocket When to use a HTTP call instead of a WebSocket (or HTTP 2.0) WebSocket 是基于TCP/IP协议,独立于HTTP协议的通信协议。WebSocket 是双向通讯,有状态,客户端一(多)个与服务端一(多&#xff09…

代码随想录刷题第43天

第一题是最后一块石头的重量IIhttps://leetcode.cn/problems/last-stone-weight-ii/,没啥思路,直接上题解了。本题可以看作将一堆石头尽可能分成两份重量相似的石头,于是问题转化为如何合理取石头,使其装满容量为石头总重量一半的…

【AI Agent系列】【MetaGPT多智能体学习】0. 环境准备 - 升级MetaGPT 0.7.2版本及遇到的坑

之前跟着《MetaGPT智能体开发入门课程》学了一些MetaGPT的知识和实践,主要关注在MetaGPT入门和单智能体部分(系列文章附在文末,感兴趣的可以看下)。现在新的教程来了,新教程主要关注多智能体部分。 本系列文章跟随《M…

Wagtail安装运行并结合内网穿透实现公网访问本地网站界面

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默&#xf…

C++Lambda表达式介绍

C11中引入了Lambda表达式,Lambda表达式是一种匿名函数,它可以在需要函数的地方直接定义和使用,而无需显式地定义一个函数。 lambda表达式 Lambda表达式语法定义 [capture-list](parameters) -> return-type { statement } capture-lis…

SQL Developer 小贴士:PL/SQL语法分析

对于SQL或PL/SQL中的语法错误和警告,SQL Developer可以用不同颜色的下划波浪线显示。 启用语法分析,可以用菜单Tool>Preferences>Code Editor>Completion Insight>Enable Semantic Analysis Info Tips 例如,以下的代码中&…

blender bvh显示关节名称

导入bvh,菜单选择布局,右边出现属性窗口, 在下图红色框依次点击选中,就可以查看bvh关节名称了。

自考《计算机网络原理》考前冲刺

常考选择填空 1、计算机网络的定义:计算机网络是互连的、自治的计算机的集合。 2、协议的定义:协议是网络通信实体之间在数据交换过程中需要遵循的规则或约定 3、协议的3个要素 (1) 语法:定义实体之间交换信息的格式与结构,或…

设计模式六:策略模式

1、策略模式 策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相互独立。 策略模式的角色: 策略接口角色IStrategy:用来约束一系列具体…

第一次开机开机动画结束后闪白屏

开机动画结束会闪下白屏,再进入launcher 思路 : 分析下从开机动画结束到launcher起来之间的流程步骤 从ZygoteInit.java开始分析 : SystemServer起来后会启动一些核心服务 attachApplication方法中主要创建了Application和Activity 接下里RootActivityC…

快速搭建网站原型!8款网站原型软件推荐

现在,基于云的软件已经逐渐成为主流,网站原型设计工具也不例外。与桌面版本相比,在线原型工具具有独特的优势,无论您使用Linux,Mac 或者Windows,都不需要安装就可以使用这些工具。下面小编就为大家推荐8款非…

c++入门学习⑧——模板

目录 前言 基本介绍 什么是模板? 作用 特点 分类 函数模板 语法 使用方式 注意事项 函数模板和普通函数区别 普通函数和函数模板的调用规则 局限性 类模板 语法 类模板的成员函数创建时机 类模板实例化对象 类模板实例化对象做函数参数 类模板成…

普中51单片机学习(LCD1602)

LCD1602 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔&#…

代码随想录算法训练营29期|day60 任务以及具体安排

第九章 动态规划part17 647. 回文子串 class Solution {public int countSubstrings(String s) {char[] chars s.toCharArray();int len chars.length;boolean[][] dp new boolean[len][len];int result 0;for (int i len - 1; i > 0; i--) {for (int j i; j < le…