自学内容网 自学内容网

Qt 5.14.2 学习记录 —— 십이 QLineEdit、QTextEdit


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。

结束。


原文地址:https://blog.csdn.net/kongqizyd146/article/details/145093263

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!