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

news2024/9/21 12:46:01

文章目录

  • 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);
    else
        ui->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.coloradmin.cn/o/1464725.html

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

相关文章

【Spring】IoC容器 控制反转 与 DI依赖注入 三种实现方式 总结 第五期

目录 1 - 4 期三种配置方式总结1. XML方式配置总结2. XML注解方式配置总结3. 完全注解方式配置总结 整合Spring5-Test5搭建测试环境 1 - 4 期 介绍 IoC DI Xml实现 IoC DI 注解 Xml 实现 IoC DI 完全注解实现 三种配置方式总结 1. XML方式配置总结 所有内容写到xml格式…

Linux第63步_为新创建的虚拟机添加必要的目录和安装支持linux系统移植的软件

1、创建必要的目录 输入密码“123456”,登录虚拟机 这个“zgq”,是用户名,也是下面用到的的“zgq”目录。 1)、创建“/home/zgq/linux/”目录 打开终端,进入“/home/zgq/”目录 输入“mkdir linux回车”,创建“/ho…

VUE3使用three.js显示3D模型

使用3D模型作为自动化系统的界面已经成为潮流。尽管在AutomationML 中推荐COLLADA作为 3D 模型的标准。但是COLLADA的开发者khronos 集团却已经开发了COLLADA的后继者glTF 。glTF 2.0已经成为国际标准ISO/IEC 12113:2022。 Khronos声称-‘glTF是3D里的JPEG’。目前看来glTF 更加…

【Linux】 login命令使用

login命令 在 Linux 中用于创建一个新的会话,并在新会话中登录用户。这个命令通常在终端中自动执行,当你打开一个新的终端会话或者通过 SSH 远程连接到 Linux 服务器时。 在命令后面附加欲登入的用户名称,它会直接询问密码,等待…

软件压力测试:测试方法与步骤详解

随着软件应用的不断发展,用户对系统性能的要求也逐渐提高。在不同的负载条件下,系统必须能够保持稳定、高效的运行。软件压力测试是一种验证系统在各种负载情况下性能表现的关键手段。本文将详细探讨软件压力测试的方法和步骤。 1. 明确测试目标 在进行压…

canvas水波纹效果,jquery鼠标水波纹插件

canvas水波纹效果&#xff0c;jquery鼠标水波纹插件 效果展示 jQuery水波纹效果&#xff0c;canvas水波纹插件 HTML代码片段 <div class"scroll04wrap"><h3>发展历程</h3><div class"scroll04"><p>不要回头&#xff0c;一…

Sora背后的论文(1):使用 lstms 对视频展现进行无监督学习

之前那篇《Sora背后的32篇论文》发出后&#xff0c;大家都觉得不错&#xff0c;有很多小伙伴都开始啃论文了。 那么我就趁热打铁&#xff0c;把这32篇论文的通俗解读版贴一下。 从去年开始&#xff0c;我基本上形成了一个思维方式&#xff0c;任何事情做之前先看看 有没有好的…

C++力扣题目 647--回文子串 516--最长回文子序列

647. 回文子串 力扣题目链接(opens new window) 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 示例 1&#xff1a; 输入&#xff1a…

C++ 文件操作-文本文件-读取和打开文件方法详解

读文件步骤 #include <iostream> using namespace std; #include <fstream> #include <string> //文本文件 读文件void test(){// 1 包含头文件// 2 创建流对象ifstream ifs;// 3 打开文件 并且判断是否打开成功ifs.open("table.txt",ios::in); //…

力扣随笔之两数之和 Ⅱ -输入有序数组(中等167)

思路&#xff1a;在递增数组中找出满足相加之和等于目标数 定义左右两个指针&#xff08;下标&#xff09;从数组两边开始遍历&#xff0c;若左右指针所指数字之和大于目标数&#xff0c;则将右指针自减&#xff0c;若左右指针所指数字之和小于目标数&#xff0c;则左指针自加&…

C# CAD2016 cass10宗地Xdata数据写入

一、 查看cass10写入信息 C# Cad2016二次开发获取XData信息&#xff08;二&#xff09; 一共有81条数据 XData value: QHDM XData value: 121321 XData value: SOUTH XData value: 300000 XData value: 141121JC10720 XData value: 权利人 XData value: 0702 XData value: YB…

VSCode-更改系统默认路径

修改vscode中的默认扩展路径&#xff1a;"%USERPROFILE%\.vscode" 打开目录C:\用户\电脑用户名&#xff0c;将.vscode文件剪切至D:\VSCode文件夹下 用管理员身份打开cmd.exe命令界面输入mklink /D "%USERPROFILE%\.vscode" "D:\VSCode\.vscode\"…

AI工具新革命:从ChatGPT到Sora,生成式AI改变世界

这个春节着实精彩&#xff0c;“春山学”吃透了&#xff0c;不如把目光移向OpenAI又一重磅产品——文生视频大模型Sora。智能新纪元已然开启&#xff0c;因为正如周鸿祎所说&#xff1a;“,Sora的诞生意味着AGI&#xff08;通用人工智能&#xff09;的实现将从10年缩短到1年。”…

【高德地图】Android高德地图初始化定位并显示小蓝点

&#x1f4d6;第3章 初始化定位并显示小蓝点 ✅第1步&#xff1a;配置AndroidManifest.xml✅第2步&#xff1a;设置定位蓝点✅第3步&#xff1a;初始化定位✅完整代码 ✅第1步&#xff1a;配置AndroidManifest.xml 在application标签下声明Service组件 <service android:n…

阿里开源低代码引擎 - Low-Code Engine

阿里开源低代码引擎 - Low-Code Engine 本文主要介绍如何在Windows运行/开发阿里开源低代码引擎 - Low-Code Engine 详细文档参见【 阿里开源低代码引擎 - Low-Code Engine 官方文档】 目录 阿里开源低代码引擎 - Low-Code Engine一、环境准备1、使用 WSL 在 Windows 上安装 L…

【Kotlin】流程控制

1 选择结构 Kotlin 中选择结构主要包含 if -else、when 语句&#xff0c;并且可以返回结果。 1.1 if-else 1.1. 条件选择 fun main() {var score 85if (score > 90) {println("优秀")} else if (score > 80) {println("良好")} else if (score &…

基于SSH打通隧道实现异地组网

前言 最近有异地组网的需求&#xff0c;我目前的是用蒲公英X1盒子来进行组网&#xff0c;但是蒲公英X1非会员账号有设备限制3个&#xff08;这个是硬伤&#xff09;&#xff0c;虽然说可以打通P2P但是在复杂的网络环境下概率不是特别高 所以研究下SSH异地组网的方式&#xff…

k8s(3)

目录 一.K8S的三种网络 flannel的三种模式: 在 node01 节点上操作&#xff1a; calico的 三种模式&#xff1a; flannel 与 calico 的区别&#xff1f; 二.CoreDNS 在所有 node 节点上操作&#xff1a; 在 master01 节点上操作&#xff1a; ​编辑 DNS 解析测试&#…

AIoT网关 人工智能物联网网关

AIoT(人工智能物联网)作为新一代技术的代表&#xff0c;正以前所未有的速度改变着我们的生活方式。在这个智能时代&#xff0c;AIoT网关的重要性日益凸显。它不仅是连接智能设备和应用的关键&#xff0c;同时也是实现智能化家居、智慧城市和工业自动化的必备技术。      一…

OCPP 1.6 接入实现文档

一、简介 OCPP&#xff08;Open Charge Point Protocol&#xff09;是一个开放的通信协议&#xff0c;用于充电站&#xff08;Charge Point&#xff09;与中央系统&#xff08;Central System&#xff0c;如充电站管理系统或服务提供商平台&#xff09;之间的通讯。本篇文档将…