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

【Qt开发】输入类控件(一)-> QLineEdit

目录

1 -> 概述

2 -> 核心属性

3 -> 核心信号

4 -> 核心功能与特性

5 -> 代码示例

5.1 -> 录入个人信息

5.2 -> 使用正则表达式验证输入框的数据

5.3 验证两次输入的密码一致

5.4 -> 切换显示密码

6 -> 结语


1 -> 概述

在 Qt 框架中,QLineEdit 是一个基础且功能丰富的单行文本输入控件,它为应用程序提供了高效的用户文本输入解决方案。作为 Qt Widgets 模块的核心组件之一,QLineEdit 在各种桌面应用程序中扮演着不可或缺的角色。

2 -> 核心属性

属性说明
text输入框中的文本
inputMask输入内容格式约束
maxLength最大长度
frame是否添加边框
echoMode

显示方式

  • QLineEdit::Normal:这是默认值,文本框会显示输入的文本
  • QLineEdit::Password:在这种模式下,输入的字符会被隐藏,通常用星号(*)或等号(=)代替
  • QLineEdit::NoEcho:在这种模式下,文本框不会显示任何输入的字符
cursorPosition光标所在位置
alignment文字对齐方式,设置水平和垂直方向的对齐
dragEnabled是否允许拖拽
readOnly是否是只读的(不允许修改)
placeHolderText当输入框内容为空的时候,显示什么样的提示信息
clearButtonEnabled是否会自动显示出 “清除按钮”

3 -> 核心信号

属性说明
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 是新的文本

代码对文本的修改不能触发这个信号

4 -> 核心功能与特性

QLineEdit 不仅仅是一个简单的文本框,它集成了多种实用功能以满足不同的输入需求。控件支持标准文本编辑操作,包括复制、剪切、粘贴和撤销重做等功能,提供了熟悉的编辑体验。通过设置验证器和输入掩码,开发者可以轻松限制用户输入的内容格式,确保数据的准确性和一致性。

该控件还提供了丰富的显示选项,开发者可以设置占位符文本以提示用户输入内容,也可以控制密码字段的显示模式,保护敏感信息。边框和背景样式的可定制性使得 QLineEdit 能够完美融入各种界面设计。

5 -> 代码示例

5.1 -> 录入个人信息

1. 在界面上创建三个输入框,两个单选按钮和一个普通按钮

三个输入框的 objectName 分别为 lineEdit_name、lineEdit_password、lineEdit_phone

两个单选框的 objectName 分别为 radioButton_male、radioButton_female

普通按钮的 objectName 为 pushButton_submit

2. 编写 widget.cpp,在构造函数中编写初始化代码

#include "widget.h"
#include "ui_widget.h"#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 初始化姓名输入框ui->lineEdit_name->setPlaceholderText("请输入姓名");ui->lineEdit_name->setClearButtonEnabled(true);// 初始化密码输入框ui->lineEdit_password->setPlaceholderText("请输入密码");ui->lineEdit_password->setClearButtonEnabled(true);// 显式模式设置成密码模式ui->lineEdit_password->setEchoMode(QLineEdit::Password);// 初始化手机号输入框ui->lineEdit_phone->setPlaceholderText("请输入手机号");ui->lineEdit_phone->setClearButtonEnabled(true);// 手机号码是有固定格式的. 此处的 0 代表 "数字"ui->lineEdit_phone->setInputMask("000-0000-0000");
}Widget::~Widget()
{delete ui;
}

3. 继续修改 widget.cpp,给按钮添加 slot 函数

void Widget::on_pushButton_submit_clicked()
{QString value = ui->radioButton_male->isChecked() ? "男" : "女";qDebug() << "姓名: " << ui->lineEdit_name->text()<< "密码: " << ui->lineEdit_password->text()<< "性别: " << value<< "手机号: " << ui->lineEdit_phone->text();
}

4. 运行程序,可以看到,随着用户输入内容之后,点击按钮,就能打印到输入的信息

inputMask 只能进行简单的输入格式校验

实际开发中,基于正则表达式的方式是更核心的方法。

5.2 -> 使用正则表达式验证输入框的数据

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

1. 在界面上创建输入框和一个按钮

2. 编写 widget.cpp,把按钮初始 enabled 设为 false。给输入框添加验证器

  • 使用 QRegExp 创建一个正则表达式对象。"^1\\d{10}$" 表示 “以 1 开头,后面跟上任意的 10 个十进制数字”。
  • 使用 QRegExpValidator 创建一个验证器对象。Qt 中内置了四个主要的验证器对象。

QRegularExpressionValidator 在匹配性能上做出了一定优化。但是从使用角度来说,和 QRegExpValidator 差别不大。

#include "widget.h"
#include "ui_widget.h"#include <QRegExpValidator>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QRegExp regexp("^1\\d{10}$");ui->lineEdit->setValidator(new QRegExpValidator(regexp));
}Widget::~Widget()
{delete ui;
}

3. 编写 widget.cpp,给 lineEdit 添加 textEdited 信号的 slot 函数

  • on_lineEdit_textEdited 的参数是当前输入框的内容。
  • 通过 lineEdit->validator() 获取到内置的验证器。
  • 通过 validate 方法验证文本是否符合要求。
    • 第一个参数填写的是要验证的字符串,由于参数要求是 QString& 而不是 const QString&,需要把这个变量复制一下。
    • 第二个参数是一个 int&,是输出型参数。当验证的字符串不匹配时,返回这个字符串的长度。
    • 返回值是一个枚举。QValidator::Acceptable 表示验证通过,QValidator::Invalid 表示验证不通过。
void Widget::on_lineEdit_textEdited(const QString &text)
{QString content = text;int pos = 0;if (ui->lineEdit->validator()->validate(content, pos) == QValidator::Acceptable){// 通过验证ui->pushButton->setEnabled(true);}else{// 未通过验证ui->pushButton->setEnabled(false);}}

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

5.3 验证两次输入的密码一致

1. 在界面上创建两个输入框和一个 QLabel

2. 编写代码,设置两个输入框的 echoMode 为 Password

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置成为密码模式ui->lineEdit->setEchoMode(QLineEdit::Password);ui->lineEdit_2->setEchoMode(QLineEdit::Password);ui->label->setText("密码为空");}Widget::~Widget()
{delete ui;
}

3. 给两个输入框设置 textEdited 的 slot 函数

void Widget::on_lineEdit_textEdited(const QString &arg1)
{(void) arg1;this->compare();
}void Widget::on_lineEdit_2_textEdited(const QString &arg1)
{(void) arg1;this->compare();
}void Widget::compare()
{const QString& s1 = ui->lineEdit->text();const QString& s2 = ui->lineEdit_2->text();if (s1.isEmpty() && s2.isEmpty()){ui->label->setText("密码为空");}else if(s1 == s2){ui->label->setText("两次输入的密码一致");}else{ui->label->setText("两次输入的密码不一致");}}

4. 运行程序,可以看到,当两个输入框内的密码相同时,就会提示密码相同

5.4 -> 切换显示密码

1. 创建一个输入框和一个复选按钮

2. 修改 widget.cpp,设置输入框的 echoMode 为 Password

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 初始化显示模式为密码模式ui->lineEdit->setEchoMode(QLineEdit::Password);ui->lineEdit->setPlaceholderText("请输入密码");
}Widget::~Widget()
{delete ui;
}

3. 修改 widget.cpp,给 checkBox 添加 slot 函数

void Widget::on_checkBox_toggled(bool checked)
{if (checked){// 为“true” 显示模式切换为Normalui->lineEdit->setEchoMode(QLineEdit::Normal);}else{// 为“false” 显示模式切换为Passwordui->lineEdit->setEchoMode(QLineEdit::Password);}
}

4. 运行程序,可以看到,切换复选框的状态,就可以控制输入框显示密码

6 -> 结语

QLineEdit 作为 Qt 框架中文本输入的基础组件,以其丰富的功能、灵活的定制选项和稳定的性能,成为开发者在构建桌面应用程序时的首选工具之一。无论是简单的数据输入还是复杂的交互需求,QLineEdit 都能提供可靠的解决方案,体现了 Qt 框架对开发者需求的深入理解和精心设计。


感谢各位大佬支持!!!

互三啦!!!

http://www.dtcms.com/a/392348.html

相关文章:

  • python10——组合数据类型(集合)
  • 分布式专题——14 RabbitMQ之集群实战
  • WEEX唯客的多维度安全守护
  • 深度学习环境配置
  • 生鲜速递:HTTP 的缓存控制
  • ​​Snipaste 2.10.1.dmg截图安装教程|Mac电脑拖拽安装详细步骤​
  • 10.1.1 使用python完成第一个遗传算法
  • C语言内存精讲系列(二十九):C 语言堆区内存进阶与动态内存实战
  • 6G量子通信融合:破解未来网络的安全与效能密码
  • C#练习题——泛型实现单例模式和增删改查
  • 网关登录校验
  • Kubernetes Fluent Bit Pod Pending 问题解决方案
  • 我爱学算法之—— 位运算(中)
  • 什么是差分信号
  • 相机标定(Camera Calibration)原理及步骤:从 “像素模糊” 到 “毫米精准” 的关键一步
  • 用 【C# + WinUI3 + 图像动画】 来理解:高数 - 函数 - 初等函数
  • ​​[硬件电路-296]:单刀双掷(SPDT)模拟开关
  • 【MAVLink】MAVSDK编程入门、基本概念
  • MAC-基于反射的枚举工具类优化
  • 防御性编程:编程界的‘安全驾驶‘指南
  • Qt绘图方式有哪些
  • 使用python创建、管理、分析和可视化“欲望”之间的关系网络图
  • 铸铁平台:工业制造的基石与精密测量的核心
  • Mac环境安装Nginx指南实录
  • 《RAG是什么?为什么它比微调更适合让AI拥有“专业知识”?》
  • 【Python】控制台界面演示
  • 软考中级习题与解答——第九章_信息安全(2)
  • [新启航]民航发动机燃油喷嘴的多孔阵列孔深光学 3D 轮廓测量 - 激光频率梳 3D 轮廓技术
  • 【测试开发/测试】详解测试用例(下):详解设计测试用例的方法
  • Go基础:Go语言错误和异常详解