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

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。

结束。


http://www.kler.cn/a/505542.html

相关文章:

  • AI 编程工具—Cursor进阶使用 阅读开源项目
  • 关于在 Kotlin DSL 中,ndk 的配置方式
  • 赛灵思(Xilinx)公司Artix-7系列FPGA
  • 【C】初阶数据结构3 -- 单链表
  • .net core 中使用AsyncLocal传递变量
  • scrapy爬取图片
  • win32汇编环境,窗口程序中组合框的应用举例
  • 如何将一个数组转换为字符串?
  • 01、kafka知识点综合
  • [Linux]Docker快速上手操作教程
  • LevelDB 源码阅读:如何优雅地合并写入和删除操作
  • 【MySQL学习笔记】MySQL存储过程
  • 通信与网络安全管理之ISO七层模型与TCP/IP模型
  • 计算机后端学习路径(精华版)
  • 仪式感在会员体系建设中的重要性及AI智能名片2+1链动模式S2B2C商城小程序的应用研究
  • 神经网络基础-网络优化方法
  • Lua调用C#
  • YOLOv11 OBB 任务介绍与数据集构建要求及训练脚本使用指南
  • Linux——进程信号
  • rust toml
  • 遥感图像滑坡分类数据集2773张2类别
  • mac下使用arthas分析工具报错
  • Nginx三种不同类型的虚拟主机(基于域名、IP 和端口)
  • VSCode连接Github的重重困难及解决方案!
  • Python入门教程丨2.3 流程控制、算法效率分析及优化
  • MySQL(行结构)