Qt 5.14.2 学习记录 —— 십이 QLineEdit、QTextEdit
文章目录
- 1、QLineEdit
- 1、写程序
- 2、正则表达式检查电话号码
- 3、验证两次输入的密码是否一致
- 4、切换显示密码状态
- 2、TextEdit
- 1、多行编写
- 2、信号
1、QLineEdit
text在代码上改变或者界面上直接改动都会修改这个属性。
clearButtonEnabled,输入框为空,没有显示内容;输入时,右侧出现一个删除按钮,一点击就可以把输入内容清空。
1、写程序
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->lineEdit_name->setPlaceholderText("请输入姓名");
ui->lineEdit_name->setClearButtonEnabled(true);
ui->lineEdit_pw->setPlaceholderText("请输入密码");
ui->lineEdit_pw->setClearButtonEnabled(true);
ui->lineEdit_pw->setEchoMode(QLineEdit::Password);
ui->lineEdit_phone->setPlaceholderText("请输入电话号码");
ui->lineEdit_phone->setClearButtonEnabled(true);
// 0代表数字, 字符串固定了输入格式
ui->lineEdit_phone->setInputMask("000-0000-0000");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_submit_clicked()
{
QString gender = ui->radioButton_female->isChecked() ? "女" : "男";
qDebug() << "姓名: " << ui->lineEdit_name->text()
<< "密码: " << ui->lineEdit_pw->text()
<< "性别: " << gender
<< "电话: " << ui->lineEdit_phone->text();
}
2、正则表达式检查电话号码
电话号码的格式用inputMask来固定,但用正则表达式更好,也通用。
#include <QRegExpValidator>
// 注册验证器
// ^表示以后面的一个内容为开头; \d表示数字, \\不被转义; $表示结尾
QRegExp regExp("^1\\d{10}$");
ui->lineEdit_phone->setValidator(new QRegExpValidator(regExp));
接着转到这个框的槽函数textChanged或者textEdited,要写执行逻辑
void Widget::on_lineEdit_phone_textChanged(const QString &arg1)
{
QString phone = arg1;
int pos = 0;
if (ui->lineEdit_phone->validator()->validate(phone, pos) == QValidator::Acceptable)
ui->pushButton_submit->setEnabled(true);
else
ui->pushButton_submit->setEnabled(false);
}
ui->lineEdit_phone->validator()获得之前设定好的正则表达式,调用validate方法去验证是否等于QValidator::Acceptable,也就是可接受的。通过那么提交按钮就可用,不通过就不可用。validate两个参数,一个是用于检查的QString& 参数,另一个是int& 参数,表示如果不符合规则,返回从哪个位置开始不符合规则。
3、验证两次输入的密码是否一致
// 先在构造函数里设定一下初始值
ui->label->setText("密码为空");
// widget.h
public:
Widget(QWidget *parent = nullptr);
~Widget();
void compare();
// widget.cpp
void Widget::compare()
{
const QString& s1 = ui->lineEdit_pw_1->text();
const QString& s2 = ui->lineEdit_pw_2->text();
if (s1.isEmpty() && s2.isEmpty())
ui->label->setText("密码为空");
else if (s1 == s2)
ui->label->setText("两次输入的密码一致");
else
ui->label->setText("两次输入的密码不一致");
}
void Widget::on_lineEdit_pw_2_textEdited(const QString &arg1)
{
// (void) 消除警告
(void) arg1;
this->compare();
}
void Widget::on_lineEdit_pw_1_textEdited(const QString &arg1)
{
(void) arg1;
this->compare();
}
4、切换显示密码状态
ui->checkBox->setText("显示密码");
void Widget::on_checkBox_toggled(bool checked)
{
// true就显示密码, false隐藏密码
if (checked)
{
ui->lineEdit_pw_1->setEchoMode(QLineEdit::Normal);
ui->lineEdit_pw_2->setEchoMode(QLineEdit::Normal);
}
else
{
ui->lineEdit_pw_1->setEchoMode(QLineEdit::Password);
ui->lineEdit_pw_2->setEchoMode(QLineEdit::Password);
}
}
toggled在状态发生变化时触发。
2、TextEdit
多行输入框,和PlainTextEdit的区别是,PTE只能显示纯文本Plain Text,TE则可以显示Plain Text,html,markdown等。
1、多行编写
转到下面Text Edit的textChanged槽函数
void Widget::on_textEdit_textChanged()
{
const QString& text = ui->textEdit->toPlainText();
ui->label->setText(text);
}
2、信号
void Widget::on_textEdit_textChanged()
{
const QString& text = ui->textEdit->toPlainText();
ui->label->setText(text);
qDebug() << "textChanged: " << ui->textEdit->toPlainText();
}
void Widget::on_textEdit_selectionChanged()
{
QTextCursor cursor = ui->textEdit->textCursor();
qDebug() << "selectionChanged: " << cursor.selectedText();
}
void Widget::on_textEdit_cursorPositionChanged()
{
QTextCursor cursor = ui->textEdit->textCursor();
qDebug() << "cursorPositionChange: " << cursor.position();
}
void Widget::on_textEdit_undoAvailable(bool b)
{
qDebug() << "undoAvailable: " << b;
}
void Widget::on_textEdit_redoAvailable(bool b)
{
qDebug() << "redoAvailable: " << b;
}
void Widget::on_textEdit_copyAvailable(bool b)
{
qDebug() << "copyAvailabl: " << b;
}
关于undo和redo信号,ctrl + z时undo为false,redo为true;ctrl + y时undo为true,redo为false。
结束。