QT--文本框 QLineEdit、qtextedit

在Qt中,文本框(QLineEditQTextEdit)和标签(QLabel)是两种不同的部件(widget),它们的主要区别在于用途和功能:

QLabel(标签)

  1. 用途:用于显示文本或图像,通常作为静态显示组件。
  2. 编辑:不可编辑,除非你在代码中直接改变其内容。
  3. 功能
    • 可以显示纯文本、富文本(HTML格式)和图像。
    • 支持文本对齐方式的设置。
    • 可以设置文本的字体、颜色等样式。
  4. 交互性:不响应用户的输入,仅用于显示信息。

示例代码(标签):

QLabel *label = new QLabel("This is a label");
label->setAlignment(Qt::AlignCenter);
label->setText("<b>Bold Text</b>"); // 使用HTML格式

QLineEdit(单行文本框)

  1. 用途:用于输入和编辑单行文本。
  2. 编辑:用户可以在运行时输入和编辑文本。
  3. 功能
    • 可以设置占位符文本(提示用户输入内容)。
    • 支持输入验证(如仅允许输入数字)。
    • 可以设置文本的对齐方式。
  4. 交互性:用户可以点击并编辑文本。

示例代码(单行文本框):

QLineEdit *lineEdit = new QLineEdit(); 
lineEdit->setPlaceholderText("Enter your text here");

QTextEdit(多行文本框)

  1. 用途:用于输入和编辑多行文本。
  2. 编辑:用户可以在运行时输入和编辑多行文本。
  3. 功能
    • 支持富文本(HTML格式)。
    • 可以设置占位符文本。
    • 支持文本的对齐方式和字体样式等设置。
  4. 交互性:用户可以点击并编辑文本。

示例代码(多行文本框):

QTextEdit *textEdit = new QTextEdit(); 
textEdit->setPlaceholderText("Enter your text here");
textEdit->setHtml("<b>Bold Text</b><br><i>Italic Text</i>");

总结

  • QLabel用于显示静态文本或图像,不可编辑,适用于需要仅显示信息的场合。
  • QLineEdit用于输入和编辑单行文本,适用于需要用户输入单行数据的场合。
  • QTextEdit用于输入和编辑多行文本,适用于需要用户输入长文本或富文本的场合。

这里对QLineEdit进行例子测试

QLineEdit

占位字符串

占位字符,就是当文本框中输入内容为空时,显示的字符,用于提示用户文本框中应该输入什么内容

// 获取和设置占位字符串
QString placeholderText() const
void setPlaceholderText(const QString &)    

如下,是 QQ 登录界面的用户名和密码文本框,在输入内容为空时,提示如下:

对齐方式

用于设置文本框中的内容在水平和垂直两个方向上的对齐方式,比如左对齐、右对齐、上对齐、下对齐、水平居中、垂直居中等。

// 获取和设置文本的对齐方式
Qt::Alignment alignment() const
void setAlignment(Qt::Alignment flag)

其中,Qt::Alignment 是一个宏,常用取值如下:

  • Qt::AlignLeft(0x0001) 水平方向-左对齐
  • Qt::AlignRight(0x0002) 水平方向-右对齐
  • Qt::AlignHCenter(0x0004) 水平方向-居中对齐
  • Qt::AlignTop(0x0020)垂直方向-上对齐
  • Qt::AlignBottom(0x0040)垂直方向-下对齐
  • Qt::AlignVCenter(0x0080)垂直方向-居中对齐
  • Qt::AlignCenter(AlignVCenter | AlignHCenter) 垂直方向和水平方向-居中对齐

上面的每一个宏,都代表 16 进制中的一位,可以进行或(|)操作,来同时设置多个对齐方式。

回显模式

所谓回显模式(EchoMode),就是输入的内容如何显示

该属性既可以在 Qt 设计师右侧的属性窗口中修改,也可以在代码中动态地获取和修改

// 获取和设置回显模式
QLineEdit::EchoMode echoMode() const
void setEchoMode(QLineEdit::EchoMode)

其中,QLineEdit::EchoMode 是一个宏,有如下 4 个取值:

  • QLineEdit::Normal

        正常模式。输入什么就显示什么,默认就是这种方式

  • QLineEdit::Password

        密码模式。不显示实际输入的字符,而是以小圆圈代替,这样别人就无法看到输入的字符。

        Do not display anything. This may be appropriate for passwords where even the length of the password should be kept secret.

  • QLineEdit::NoEcho

        无回显模式。无论输入什么内容,在文本框中都不会显示,这样别人既无法看到输入的内容,也无法知道输入字符的长度

        这对于输入密码非常有用,在linux下输入密码时,就是这种模式

  • QLineEdit::PasswordEchoOnEdit

        正在输入时显示正常模式显示,当失去焦点时以密码模式显示,也就是显示小圆圈

读写控制

用于设置文本框是否可编辑、是否使能

// 获取和设置文本框的只读属性
bool isReadOnly() const
void setReadOnly(bool)
    
// 获取和设置文本框的是否使能
bool isEnabled() const
void setEnabled(bool)

注意:设置为只读和设置为禁能,都无法对文本框进行编辑

区别在于,只读时文本框不会置灰,而禁能时文本框会置灰

格式控制

用于指定文本框输入特定格式的内容。比如输入电话号码格式的文本,或者输入 IP 地址格式的文本等。

// 设置和获取格式控制
QString inputMask() const 
void setInputMask(const QString &inputMask)

接收一个 QString 类型的掩码,常用格式如下:

  • 无格式
// 接受任何字符的输入
setInputMask("");
  • 电话号码
// 9 - 表示要求输入0-9的数字
// ;# - 表示格式字符串结束,并且未输入时显示#
ui->leMask->setInputMask("99999999999;#");
  • 密钥
// 9 - 表示要求输入0-9的数字
// ;# - 表示格式字符串结束,并且未输入时显示*
ui->leMask->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;*");

其他更多格式使用方法,直接查看 QLineEdit 帮助文档即可,以上列出的两个,仅作为抛砖引玉

信号槽

QLineEdit 有多个信号和槽函数,详情可参考官方帮助文档,这里仅演示两个常用的,作为抛砖引玉

  • textChanged 信号
// 当文本框内容改变时,发射该信号
void textChanged(const QString &text)
  • editingFinished
// 当输入完毕时,发射该信号
void editingFinished()

什么叫输入完毕呢?

答:a、按了 enter 键 b、文本框失去焦点

案例

该案例演示,文本框的回显模式、对齐方式、读写控制、校验、格式控制,如下:

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->leAdd1->setValidator(new QIntValidator(this)); // 用于设置校验,只允许文本框中输入整数
    ui->leAdd1->setPlaceholderText("加数");
    ui->leAdd2->setValidator(new QIntValidator(this));
    ui->leAdd2->setPlaceholderText("被加数");
    ui->leSum->setPlaceholderText("和");

    // 演示-textFinished信号
    ui->leSub1->setValidator(new QIntValidator(this));
    ui->leSub1->setPlaceholderText("减数");
    ui->leSub2->setValidator(new QIntValidator(this));
    ui->leSub2->setPlaceholderText("被减数");
    ui->leResult->setPlaceholderText("差");
}

Widget::~Widget()
{
    delete ui;
}

// 1、回显模式
// 1.1 正常
void Widget::on_btnEchoNormal_clicked()
{
    ui->leEcho->clear();
    ui->leEcho->setEchoMode(QLineEdit::Normal);
    ui->leEcho->setPlaceholderText("Normal");
}

// 1.2 密码模式
void Widget::on_btnEchoPassword_clicked()
{
    ui->leEcho->clear();
    ui->leEcho->setEchoMode(QLineEdit::Password);
    ui->leEcho->setPlaceholderText("Password");
}

// 1.3 不回显
void Widget::on_btnEchoNoEcho_clicked()
{
    ui->leEcho->clear();
    ui->leEcho->setEchoMode(QLineEdit::NoEcho);
    ui->leEcho->setPlaceholderText("NoEcho");
}

// 1.4 失去焦点时为密码模式
void Widget::on_btnEchoPasswordEchoOnEdit_clicked()
{
    ui->leEcho->clear();
    ui->leEcho->setEchoMode(QLineEdit::PasswordEchoOnEdit);
    ui->leEcho->setPlaceholderText("PasswordEchoOnEdit");
}

// 打印输处
void Widget::on_btnEchoPrint_clicked()
{
    QMessageBox::information(this, "回显模式", ui->leEcho->text());
}

// 2、对齐方式
// 2.1 左对齐
void Widget::on_btnAlignLeft_clicked()
{
    ui->leAlignment->setAlignment(Qt::AlignLeft);
    ui->leAlignment->setPlaceholderText("Left");
}

// 2.2 居中对齐
void Widget::on_btnAlignCenter_clicked()
{
    ui->leAlignment->setAlignment(Qt::AlignCenter);
    ui->leAlignment->setPlaceholderText("Center");
}

// 2.3 右对齐
void Widget::on_btnAlignRight_clicked()
{
    ui->leAlignment->setAlignment(Qt::AlignRight);
    ui->leAlignment->setPlaceholderText("Right");
}

// 3、读写控制
// 3.1 可读可写
void Widget::on_btnAccessReadWrite_clicked()
{
    ui->leAccess->setReadOnly(false);
    ui->leAccess->setPlaceholderText("ReadWrite");
}

// 3.2 只读
void Widget::on_btnAccessReadOnly_clicked()
{
    ui->leAccess->setReadOnly(true);
    ui->leAccess->setPlaceholderText("ReadOnly");
}

// 3.3 禁能
void Widget::on_btnAccessDisabled_clicked()
{
    ui->leAccess->setEnabled(false);
    ui->leAccess->setPlaceholderText("Disabled");
}

// 3.4 使能
void Widget::on_btnAccessEnabled_clicked()
{
    ui->leAccess->setEnabled(true);
    ui->leAccess->setPlaceholderText("Enabled");
}

void Widget::on_btnAccessPrint_clicked()
{
    QMessageBox::information(this, "文本框演示", ui->leAccess->text());
}

// 4、格式控制
// 4.1 无格式
void Widget::on_btnMaskNone_clicked()
{
    ui->leMask->setInputMask("");
}

// 4.2 电话号码格式
void Widget::on_btnMaskPhone_clicked()
{
    // 9 - 表示要求输入0-9的数字
    // ;# - 表示格式字符串结束,并且未输入时显示#
    ui->leMask->setInputMask("99999999999;#");
}

// 4.3 密钥格式
void Widget::on_btnMaskLicense_clicked()
{
    // 9 - 表示要求输入0-9的数字
    // ;# - 表示格式字符串结束,并且未输入时显示*
    ui->leMask->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;*");
}

// 5、信号槽演示
// 5.1 textChanged信号 - 实现自动计算加法结果
void Widget::on_leAdd1_textChanged(const QString &arg1)
{
    int sum = arg1.toInt() + ui->leAdd2->text().toInt();
    ui->leSum->setText(QString::number(sum));
}

void Widget::on_leAdd2_textChanged(const QString &arg1)
{
    int sum = arg1.toInt() + ui->leAdd1->text().toInt();
    ui->leSum->setText(QString::number(sum));
}

// 5.2 editingFinished信号 - 实现自动计算减法结果
void Widget::on_leSub1_editingFinished()
{
    int result = ui->leSub1->text().toInt() - ui->leSub2->text().toInt();
    ui->leResult->setText(QString::number(result));
}

void Widget::on_leSub2_editingFinished()
{
    int result = ui->leSub1->text().toInt() - ui->leSub2->text().toInt();
    ui->leResult->setText(QString::number(result));
}

 

因为明王写的很简明易懂,我直接搬过来了,具体参考这篇文章,同时因为前面几个的操作发现并不难,所以自己就不敲代码了,只进行总结和思考,先知道这个东西,后面用到在深入学习即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/892420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PythonExcel批量pingIP地址

问题&#xff1a; 作为一个电气工程师&#xff08;PLC&#xff09;&#xff0c;当设备掉线的时候&#xff0c;需要用ping工具来检查网线物理层是否可靠连接&#xff0c;当项目体量过大时&#xff0c;就不能一个手动输入命令了。 解决方案一&#xff1a; 使用CMD命令 for /L %…

算法.图论-BFS及其拓展

文章目录 广度优先搜索简介经典bfs习题地图分析贴纸拼词 01bfs解析基本过程相关习题 广度优先搜索简介 bfs的特点是逐层扩散, 从源头到目标点扩散了几层, 最短路就是多少 bfs的使用特征是任意两个节点的距离(权值)是相同的(无向图, 矩阵天然满足这一特点) bfs开始的时候可以是…

树莓派应用--AI项目实战篇来啦-10.OpenCV进行车牌检测

1. 介绍 本项目使用 esseract、OpenCV和Python探索光学字符识别&#xff08;OCR&#xff09;的神奇世界&#xff0c;本项目将 带你了解最受欢迎的OCR引擎 Tesseract 背后的技术&#xff0c;以及如何用 Pytesseract 和 OpenCV实现字符识别。 从图像中检测字符的技术称为…

图(Java语言实现)

一、图的概念 顶点&#xff08;Vertex&#xff09;&#xff1a;图中的数据元素&#xff0c;我们称之为顶点&#xff0c;图至少有一个顶点&#xff08;非空有穷集合&#xff09;。 边&#xff08;Edge&#xff09;&#xff1a;顶点之间的关系用边表示。 1.图&#xff08;Graph…

Python Django 数据库优化与性能调优

Python Django 数据库优化与性能调优 Django 是一个非常流行的 Python Web 框架&#xff0c;它的 ORM&#xff08;对象关系映射&#xff09;允许开发者以简单且直观的方式操作数据库。然而&#xff0c;随着数据量的增长&#xff0c;数据库操作的效率可能会成为瓶颈&#xff0c…

如何在Ubuntu上更改MySQL数据存储路径

文章目录 0 背景1 备份现有数据库数据2 停止 MySQL 服务3 复制现有的 MySQL 数据到新目录4 修改 MySQL 配置文件5 更新 AppArmor 或 SELinux 配置&#xff08;如有启用&#xff09;6. 修改 MySQL 系统文件中的 datadir7. 启动 MySQL 服务8. 验证更改参考资料 0 背景 在原先划分…

股市入门常见术语介绍

鉴于最近行情讨论火热&#xff0c;我也想借此平台&#xff0c;结合我大学时期身边同学老师的投资经历&#xff0c;写一篇交易入门术语简介。内容不多但是足以达到科普之用。 ​ 希望大家能谨慎对待投资&#xff0c;始终保持谦虚学习的态度。不要迷失在瞬息万变的金融市场&…

webstorm 编辑器配置及配置迁移

1.下载地址 WebStorm&#xff1a;JetBrains 出品的 JavaScript 和 TypeScript IDE 其他版本下载地址 2.安装 点击下一步安装&#xff0c;可根据需要是否删除已有版本 注意&#xff1a; 完成安装后需要激活 3.设置快捷键 以下为个人常用可跳过或根据需要设置 如&#xff1a…

满级抗摔续航王者,荣耀X60系列发布,起步价仅1199元

10月16日&#xff0c;荣耀X60系列暨荣耀平板新品发布会正式举办&#xff0c;荣耀X60 Pro、荣耀X60以及荣耀平板GT Pro、荣耀亲选耳机LCHSE X7e、荣耀亲选WhizKid儿童手表2 Pro等新品悉数亮相。其中&#xff0c;荣耀X60 Pro首次搭载6600mAh最大青海湖电池、绿洲护眼屏、双向北斗…

pta-7-6 学生类设计

题目要求&#xff1a; 设计一个类Student&#xff0c;并在Main类中生成Student类对象进行测试 1.对于Student类&#xff0c;设计私有属性name和age&#xff0c;并为每一个成员变量name和age设计其setXXX&#xff08;&#xff09;和getXXX&#xff08;&#xff09;方法,并对于s…

GPT-SOVIT模型部署指南

一、模型介绍 强大的小样本语音转换和文本转语音 WebUI。 具有以下特征&#xff1a; 零样本 TTS&#xff1a; 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS&#xff1a; 仅使用 1 分钟的训练数据对模型进行微调&#xff0c;以提高语音相似度和真实感。跨语…

【Oracle数据库进阶】001.SQL基础查询_查询语句

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

2023年五一杯数学建模C题双碳目标下低碳建筑研究求解全过程论文及程序

2023年五一杯数学建模 C题 双碳目标下低碳建筑研究 原题再现&#xff1a; “双碳”即碳达峰与碳中和的简称&#xff0c;我国力争2030年前实现碳达峰&#xff0c;2060年前实现碳中和。“双碳”战略倡导绿色、环保、低碳的生活方式。我国加快降低碳排放步伐&#xff0c;大力推进…

AUTOSAR_EXP_ARAComAPI的5章笔记(13)

☞返回总目录 5.4.7 事件&#xff08;Events&#xff09; 在骨架侧&#xff0c;服务实现负责通知事件的发生。如 5.4.2 RadarService Skeleton Class 所示&#xff0c;骨架为每个事件提供一个事件包装类的成员。骨架的事件包装类与代理的事件包装类看起来明显不同。 在骨架端…

[已解决]DockerTarBuilder永久解决镜像docker拉取异常问题

前阵子发现阿里云的docker加速镜像失效了&#xff08;甚至连nginx都拉取不了&#xff09;&#xff0c;重新换了并且加多了网络上比较常用的dokcer加速源&#xff0c;可以解决一部分问题&#xff0c;但仍然有一些镜像的某个版本或一些比较冷的镜像就是拉取不了&#xff0c;原因未…

libaom 源码分析:aomdec.c 文件

aomdec.c 功能:libaom 项目完成视频解码过程的 demo文件位置:libaom/apps/aomdec.c函数关系 命令行说明 终端输入 ./aomdec --help,输出如下,展示如何使用方法。Usage: ./aomdec <options> filenameOptions:--help Show usage options and exit…

基于Springboot+Vue的小型民营加油站管理系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

libaom 源码分析综述【持续更新】

libaom libaom 是 AOMedia&#xff08;开放媒体联盟&#xff09;开发的一个开源视频编解码器库&#xff0c;它是 AV1 视频压缩格式的参考实现&#xff0c;并被广泛用于多种生产系统中。libaom 支持多种功能&#xff0c;包括可扩展视频编码&#xff08;SVC&#xff09;、实时通信…

Linux权限和开发工具(1)

文章目录 1.Linux根目录的相关文件夹2.Linux软件管理器yum3.Linux编辑器-vim的基础使用1.命令模式下一些命令:有关光标的操作:有关复制删除的操作:有关字符替换的相关操作:有关注释的相关操作: 2.插入模式3.底行模式下一些命令:实现双窗口 4.vim命令 4.vim配置5.Linux编译器-gc…