QLineEdit 文本框控件
介绍
QLineEdit是 Qt 中的文本框,准确地说是单行文本框,通常用于接受用户的输入,比如输入用户名、密码等信息。
下图为ui界面中,QLineEdit控件所处位置,便于初学者寻找。
使用方法
占位字符串
占位字符,就是当文本框中输入内容为空时,显示的字符,用于提示用户文本框中应该输入什么内容
典型例子就是QQ登录界面,如下图所示:
所使用的相关函数如下所示:
// 获取和设置文本的对齐方式
Qt::Alignment alignment() const
void setAlignment(Qt::Alignment flag)
例程如下:
ui->leEcho->setPlaceholderText("Normal");//设置占位符,用于设置在输入内容之前在文本框显示的内容
对齐方式
用于设置文本框的内容在水平和垂直两个方向上的对齐方式,使用方式和之前设置QLabel文本对齐方式一样,详细可参考:QT学习笔记2 控件QPushButton、QLabel使用方法和案例
回显模式
回显模式(EchoMode).实则就是设置文本框里的内容应该以何种形式去显示。
回显模式可以在ui右侧的属性窗口设置,也可以通过代码进行动态修改,所用到的函数如下:
// 获取和设置回显模式
QLineEdit::EchoMode echoMode() const
void setEchoMode(QLineEdit::EchoMode)
其中的QLine::EchoMode是一个宏,有如下取值:
- QLineEdit::Normal ——正常模式,输入什么显示什么
- QLineEdit::Password ——密码模式,输入字符已密码的形式显示出来,内容不可见
- QLineEdit::NoEcho ——无回显模式,输入内容显示为空白,类似于Linux环境下输入密码
- QLineEdit::PasswordEchoOnEdit ——失去焦点时以密码模式显示,当正在输入时为正常显示模式,当失去焦点,则以密码模式显示
例程如下:
ui->leEcho->setEchoMode(QLineEdit::Password);//设置回显模式为密码模式
ui->leEcho->setEchoMode(QLineEdit::NoEcho);//设置回显模式为无回显模式,不管输入什么都看不见,类似于在Linux下输入密码
读写控制
用于设置文本框是否可编辑,使能状态
// 获取和设置文本框的只读属性
bool isReadOnly() const
void setReadOnly(bool)
// 获取和设置文本框的是否使能
bool isEnabled() const
void setEnabled(bool)
例程如下:
ui->leAccess->setReadOnly(false);//设置文本框可读可写
ui->leAccess->setReadOnly(true);//设置文本框只读
ui->leAccess->setEnabled(false);//禁能文本框
ui->leAccess->setEnabled(true);//使能文本框
格式控制
用于指定文本框输入特定格式的内容。比如输入电话号码格式的文本,或者输入 IP 地址格式的文本等。
// 设置和获取格式控制
QString inputMask() const
void setInputMask(const QString &inputMask)
接收一个 QString 类型的掩码,常用格式如下:
- 无格式
// 设置和获取格式控制
QString inputMask() const
void setInputMask(const QString &inputMask)
- 电话号码
// 9 - 表示要求输入0-9的数字
// ;# - 表示格式字符串结束,并且未输入时显示#
ui->leMask->setInputMask("99999999999;#");
- 密钥
// 9 - 表示要求输入0-9的数字
// ;# - 表示格式字符串结束,并且未输入时显示*
ui->leMask->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;*");
文本框信号槽
使用方法如QPushButton,只是所发生的信号不同,以下两种常见信号
- textChanged 信号 ——当文本框内容发生改变,就会触发该信号
// 当文本框内容改变时,发射该信号
void textChanged(const QString &text)
- editingFinished 信号 ————当文本框内容输入完毕(输入完成按下enter按键、或者失去焦点),就会触发该信号
// 当输入完毕时,发射该信号
void editingFinished()
举例如下:
用于进行简单计算,设计如下所示:
代码如下所示:
- textChanged
// 5、信号槽演示
// 5.1 textChanged信号 - 实现自动计算加法结果
void Widget::on_lineEdit_add1_textChanged(const QString &arg1)
{
int num;
num = ui->lineEdit_add1->text().toInt() + ui->lineEdit_add2->text().toInt(); //两个文本框内容转化为int型数据,进行相加
ui->lineEdit_result1->setText(QString::number(num));//计算结果显示在结果文本框
}
void Widget::on_lineEdit_add2_textChanged(const QString &arg1)
{
int num;
num = ui->lineEdit_add1->text().toInt() + ui->lineEdit_add2->text().toInt();//两个文本框内容转化为int型数据,进行相加
ui->lineEdit_result1->setText(QString::number(num));//计算结果显示在结果文本框
}
- editingFinished
// 5.2 editingFinished信号 - 实现自动计算减法结果
void Widget::on_lineEdit_sub1_editingFinished()
{
int num;
num = ui->lineEdit_sub1->text().toInt() + ui->lineEdit_sub2->text().toInt();//两个文本框内容转化为int型数据,进行相减
ui->lineEdit_result2->setText(QString::number(num));//计算结果显示在结果文本框
}
void Widget::on_lineEdit_sub2_editingFinished()
{
int num;
num = ui->lineEdit_sub1->text().toInt() + ui->lineEdit_sub2->text().toInt();//两个文本框内容转化为int型数据,进行相减
ui->lineEdit_result2->setText(QString::number(num));//计算结果显示在结果文本框
}
整体设计
代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
on_btnEchoNormal_clicked(); // 默认正常模式回显
on_btnAlignLeft_clicked(); // 默认左对齐
on_btnAccessReadWrite_clicked(); // 默认可读可写
on_btnMaskNone_clicked(); // 默认无格式控制
// 演示-textChanged信号
ui->lineEdit_add1->setValidator(new QIntValidator(this));// 用于设置校验,只允许文本框中输入整数
ui->lineEdit_add1->setPlaceholderText("加数");
ui->lineEdit_add2->setValidator(new QIntValidator(this));
ui->lineEdit_add2->setPlaceholderText("被加数");
ui->lineEdit_result1->setPlaceholderText("和");
// 演示-textFinished信号
ui->lineEdit_sub1->setValidator(new QIntValidator(this));
ui->lineEdit_sub1->setPlaceholderText("减数");
ui->lineEdit_sub2->setValidator(new QIntValidator(this));
ui->lineEdit_sub2->setPlaceholderText("被减数");
ui->lineEdit_result2->setPlaceholderText("差");
}
Widget::~Widget()
{
delete ui;
}
// 1、回显模式
// 1.1 正常
void Widget::on_btnEchoNormal_clicked()
{
ui->lineEdit_Echo->clear();//清除文本框内容
ui->lineEdit_Echo->setEchoMode(QLineEdit::Normal);//设置回显模式为正常模式,输入什么看到什么
ui->lineEdit_Echo->setPlaceholderText("Normal");//设置占位符,用于设置在输入内容之前在文本框显示的内容
}
// 1.2 密码模式
void Widget::on_btnEchoPassword_clicked()
{
ui->lineEdit_Echo->clear();
ui->lineEdit_Echo->setEchoMode(QLineEdit::Password);//设置回显模式为密码模式,
ui->lineEdit_Echo->setPlaceholderText("Passward");
}
// 1.3 不回显
void Widget::on_btnEchoNoEcho_clicked()
{
ui->lineEdit_Echo->clear();
ui->lineEdit_Echo->setEchoMode(QLineEdit::NoEcho);//设置回显模式为无回显模式,不管输入什么都看不见,类似于在Linux下输入密码
ui->lineEdit_Echo->setPlaceholderText("NoEcho");
}
// 1.4 失去焦点时为密码模式
void Widget::on_btnEchoPasswordEchoOnEdit_clicked()
{
ui->lineEdit_Echo->clear();
ui->lineEdit_Echo->setEchoMode(QLineEdit::PasswordEchoOnEdit);//设置回显模式为焦点时为密码模式,当正在输入时为正常显示模式,当失去焦点,则以密码模式显示
ui->lineEdit_Echo->setPlaceholderText("PasswordEchoOnEdit");
}
// 打印输处
void Widget::on_btnEchoPrint_clicked()
{
QMessageBox::information(this,"回显模式",ui->lineEdit_Echo->text());
}
// 2、对齐方式
// 2.1 左对齐
void Widget::on_btnAlignLeft_clicked()
{
ui->lineEdit_Alignt->setAlignment(Qt::AlignLeft);//设置输入文本左对齐
ui->lineEdit_Alignt->setPlaceholderText("Left");
}
// 2.2 居中对齐
void Widget::on_btnAlignCenter_clicked()
{
ui->lineEdit_Alignt->setAlignment(Qt::AlignCenter);
ui->lineEdit_Alignt->setPlaceholderText("Center");
}
// 2.3 右对齐
void Widget::on_btnAlignRight_clicked()
{
ui->lineEdit_Alignt->setAlignment(Qt::AlignRight);
ui->lineEdit_Alignt->setPlaceholderText("Right");
}
// 3、读写控制
// 3.1 可读可写
void Widget::on_btnAccessReadWrite_clicked()
{
ui->lineEdit_Access->setPlaceholderText("ReadWrite");
ui->lineEdit_Access->setReadOnly(false);//设置文本框可读可写
}
// 3.2 只读
void Widget::on_btnAccessReadOnly_clicked()
{
ui->lineEdit_Access->setPlaceholderText("ReadOnly");
ui->lineEdit_Access->setReadOnly(true);//设置文本框只读
}
// 3.3 禁能
void Widget::on_btnAccessDisable_clicked()
{
ui->lineEdit_Access->setPlaceholderText("Disable");
ui->lineEdit_Access->setEnabled(false);//禁能文本框
}
// 3.4 使能
void Widget::on_btnAccessEnable_clicked()
{
ui->lineEdit_Access->setPlaceholderText("Enable");
ui->lineEdit_Access->setEnabled(true);//使能文本框
}
void Widget::on_btnAccessPrint_clicked()
{
QMessageBox::information(this, "文本框演示", ui->lineEdit_Access->text());
}
// 4、格式控制
// 4.1 无格式
void Widget::on_btnMaskNone_clicked()
{
ui->lineEdit_Mask->setInputMask("");
}
// 4.2 电话号码格式
void Widget::on_btnMaskPhone_clicked()
{
// 9 - 表示要求输入0-9的数字
// ;# - 表示格式字符串结束,并且未输入时显示#
ui->lineEdit_Mask->setInputMask("99999999999;#");
}
// 4.3 密钥格式
void Widget::on_btnMaskLicense_clicked()
{
// 9 - 表示要求输入0-9的数字
// ;# - 表示格式字符串结束,并且未输入时显示*
ui->lineEdit_Mask->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA;*");
}
// 5、信号槽演示
// 5.1 textChanged信号 - 实现自动计算加法结果
void Widget::on_lineEdit_add1_textChanged(const QString &arg1)
{
int num;
num = ui->lineEdit_add1->text().toInt() + ui->lineEdit_add2->text().toInt();
ui->lineEdit_result1->setText(QString::number(num));
}
void Widget::on_lineEdit_add2_textChanged(const QString &arg1)
{
int num;
num = ui->lineEdit_add1->text().toInt() + ui->lineEdit_add2->text().toInt();
ui->lineEdit_result1->setText(QString::number(num));
}
// 5.2 editingFinished信号 - 实现自动计算减法结果
void Widget::on_lineEdit_sub1_editingFinished()
{
int num;
num = ui->lineEdit_sub1->text().toInt() + ui->lineEdit_sub2->text().toInt();
ui->lineEdit_result2->setText(QString::number(num));
}
void Widget::on_lineEdit_sub2_editingFinished()
{
int num;
num = ui->lineEdit_sub1->text().toInt() + ui->lineEdit_sub2->text().toInt();
ui->lineEdit_result2->setText(QString::number(num));
}