【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 | 显示方式
|
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 框架对开发者需求的深入理解和精心设计。
感谢各位大佬支持!!!
互三啦!!!