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

【Qt 常用控件】输入类控件1(QLineEdit和QTextEdit 输入框)

目录

1.QLineEdit 单行输入框

例:输入个人信息,通过按钮提交

例:为输入框设置验证器,检查输入的电话

例:验证两次输入的密码是否一致

例:是否显示密码按钮,toggled信号。

2.QTextEdit多行输入框 、QPlainTextEdit纯文本输入框

例:textChanged()信号,获取输入框文本textEdit.toPlainText()

例:selectionChanged信号,获取光标选中的文本

例:cursorPositionChanged()信号,获取光标位置

例:undoAvailable(bool)和redoAvailable(bool)信号

例:copyAvailable(bool b)信号


1.QLineEdit 单行输入框

功能:单行输入框、可以输入一段文本,但不能换行。

属性:

text输入框文本
inputMask输入内容格式约束,对输入内容进行简单校验。
maxLength文本最大长度
frame是否添加边框
echoMode

显示方式

QLineEdit::Normal:默认值,输入什么显示什么

QLineEdit::Password:输入字符被隐藏

替代显示*或=

QLineEdit::NoEcho:输入不显示任何字符

cursorPosition光标所在位置
alignment文字对齐方式
dragEnabled是否允许被拖拽
readOnly是否时只读的(不允许修改文本)
placeHolderText当输入框的输入内容为空时,显示的提示信息
clearButtonEnabled是否会显示“清除按钮”,点击清除输入框输入的所有内容。

信号:
 

cursorPositionChanged(int old, int new)鼠标位置发生改变时发出信号,old为原位置、new为新位置。
editingFinished()按下返回或回车,或行编辑失去焦点时,发出次信号。
returnPressed()

按下返回或回车时发出信号,

如果设置了验证器,必须验证通过才能发出信号。

selectionChanged()

当选中的文本改变时,发出该信号。

textChanged(const QString &text)

当文本内容改变时,发出信号。

text是新文本。

当通过代码方式修改文本,也能触发该信号。

textEdited(const QString &text)

当文本内容改变时,发出信号。

text是新文本。

当通过代码方式修改文本,不能触发该信号。

只能由使用者修改输入框内容时,才会触发。

例:输入个人信息,通过按钮提交

    //InputMask,设置输入文本的固定格式,0表示数字ui->lineEdit_phone->setInputMask("000-0000-0000");
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lineEdit_name->setPlaceholderText("请输入姓名");ui->lineEdit_name->setClearButtonEnabled(true);ui->lineEdit_password->setPlaceholderText("请输入密码");ui->lineEdit_password->setEchoMode(QLineEdit::Password);ui->lineEdit_password->setClearButtonEnabled(true);ui->lineEdit_phone->setPlaceholderText("请输入电话");ui->lineEdit_phone->setClearButtonEnabled(true);//InputMask,设置输入文本的固定格式,0表示数字ui->lineEdit_phone->setInputMask("000-0000-0000");
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{//获取性别按钮的选中状态QString gender=ui->radioButton_male->isChecked()?"男":"女";//获取用户输入的信息qDebug()<<"姓名:"<<ui->lineEdit_name->text()<<"密码:"<<ui->lineEdit_password->text()<<"性别:"<<gender<<"电话:"<<ui->lineEdit_phone->text();
}

例:为输入框设置验证器,检查输入的电话

inputMask只能对输入内容跟进行简单的校验

通过正则表达式,可以实现更复杂的字符串匹配校验。

正则表达式(Regular Expression,简称 Regex)是一种用于匹配和处理字符串的模式。它可以通过一个特定的规则来定义字符的集合,帮助你查找、替换、提取或验证文本数据。

通过验证器,验证一个字符串是否符合规则

  • 定义正则表达式对象
 QRegExp regExp("^1\\d{10}$");//正则表达式对象//^1:表示以1开//\d{10}:\d表示数字,加\\为了防止c++识别为转义字符//{10}:表示前面的内容重复出现10次,就表示必须出现10个数字//$表示结尾
  •   创建一个验证器对象QRegExpValidator(regExp),设置到控件
    ui->lineEdit->setValidator(new QRegExpValidator(regExp));//只是注册一个验证器
  • 使用验证器 validator()->validate(content,pos)

参数1:需要检查的字符串

需注意textEdited信号触发,槽函数传递的参数是const的,不能直接传入validate(),需拷贝到临时对象。

参数2:int&

输入输出型参数,返回字符串从哪个位置开始不匹配

返回值:符合匹配规则时返回QValidator::Acceptable

    QString content=arg1;int pos=0;//验证通过,解除按钮的禁用状态if(ui->lineEdit->validator()->validate(content,pos)==QValidator::Acceptable){//验证通过ui->pushButton->setEnabled(true);}else{ui->pushButton->setEnabled(false);}

例题代码:通过是否匹配,来决定是否解除button按钮的禁用状态。

1.QRegExp regExp("^1\\d{10}$");//正则表达式对象2.QLineEdit*-> setValidator(new QRegExpValidator(regExp));//创建验证器,并传入lineEdit控件3.使用输入框内容改变时会触发的信号
textEdited(const QString &text)/textChanged(const QString &text)4.在槽函数中,使用验证器验证字符串,判断是否符合规则if(ui->lineEdit->validator()->validate(content,pos)==QValidator::Acceptable)
#include "widget.h"
#include "ui_widget.h"
#include<QRegExpValidator>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//给单行输入框设置验证器,基于正则表达式实现QRegExp regExp("^1\\d{10}$");//正则表达式对象//^1:表示以1开//\d{10}:\d表示数字,加\\为了防止c++识别为转义字符//{10}:表示前面的内容重复出现10次,就表示必须出现10个数字//&表示结尾//创建一个验证器对象,传入lineedit控件ui->lineEdit->setValidator(new QRegExpValidator(regExp));//只是注册一个验证器}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{
}void Widget::on_lineEdit_textEdited(const QString &arg1)
{QString content=arg1;int pos=0;//验证通过,解除按钮的禁用状态if(ui->lineEdit->validator()->validate(content,pos)==QValidator::Acceptable){//验证通过ui->pushButton->setEnabled(true);}else{ui->pushButton->setEnabled(false);}
}

例:验证两次输入的密码是否一致

使用textEdited(const QString &text)信号来触发对两个输入框内容的检查。

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置EchoModeui->lineEdit->setEchoMode(QLineEdit::Password);ui->lineEdit_2->setEchoMode(QLineEdit::Password);}Widget::~Widget()
{delete ui;
}void Widget::on_lineEdit_2_textEdited(const QString &arg1)
{this->compare();
}void Widget::on_lineEdit_textEdited(const QString &arg1)
{this->compare();
}void Widget::compare()
{//获取两个输入框的内容const QString& s1=ui->lineEdit->text();const QString& s2=ui->lineEdit_2->text();if(s1.isEmpty() && s2.isEmpty()){ui->label_tip->setText("密码为空");}else if(s1==s2){ui->label_tip->setText("两次输入的密码一致");}else{ui->label_tip->setText("两次输入的密码不一致");}
}

例:是否显示密码按钮,toggled信号。

利用按钮的toggled信号

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//默认不显示密码ui->lineEdit->setEchoMode(QLineEdit::Password);
}Widget::~Widget()
{delete ui;
}void Widget::on_checkBox_toggled(bool checked)//按钮选中的状态切换时触发
{//参数为选中状态if(checked==true){ui->lineEdit->setEchoMode(QLineEdit::Normal);}else{ui->lineEdit->setEchoMode(QLineEdit::Password);}
}

2.QTextEdit多行输入框 、QPlainTextEdit纯文本输入框

  • QTextEdit支持文本格式:纯文本、富文本、markdown格式
  • QPlainTextEdit支持的文本格式:纯文本

这两个输入框、除了支持的文本格式不一样外,其他基本一致,所以以QTextEdit为例就可以啦。

属性:

markdown

输入框的内容,支持markdown格式。

能够自动将markdown文本渲染成html。

html输入框的内容,支持大部分html标签。
placeHolderText输入框为空时的提示信息
readOnly输入框是否只读。
undoRedoEnable

是否启动undo/redo功能。

undo ctrl+z:撤销

redo ctrl+y:还原撤销

autoFormating是否开启自动格式化
tabstopWidth按下一个tab键,缩进几个空格
overwriteMode是否开启覆盖写模式
acceptRichText是否接受富文本内容。
verticalScrollBarPolicy

垂直方向滚动条的出现策略。

Qt::ScrollBarAsNeeded :根据内容⾃动决定是否需要滚动条。默认值。

Qt::ScrollBarAlwaysOff :总是关闭滚动条。 

Qt::ScrollBarAlwaysOn :总是显⽰滚动条。

horizontalScrollBarPolicy

⽔平⽅向滚动条的出现策略 Qt::ScrollBarAsNeeded :根据内容⾃动决定是否需要滚动条。这是默认值。

Qt::ScrollBarAlwaysOff :总是关闭滚动条。Qt::ScrollBarAlwaysOn :总是显⽰滚动条。

信号:
 

textChanged()文本内容发生改变时触发
selectionChanged()选中范围改变时触发
sursorPositionChanged()光标移动时触发
undoAvailable(bool)

undo操作的状态切换时触发

由不可执行到可执行变化时触发一次

或不可执行到可执行时触发一次

redoAvailable(bool)redo操作的状态切换时时触发
copyAvailable(bool)文本被选中/取消时触发

例:textChanged()信号,获取输入框文本textEdit.toPlainText()

void Widget::on_textEdit_textChanged()
{//获取多行输入框的内容const QString& str=ui->textEdit->toPlainText();//还有:toHtml() toMarkdown()ui->label->setText(str);
}

没有按下回车之前,输入的内容是输入到输入法中的。

按下回车后,才会从输入法将文本输入到输入框内,触发信号。

例:selectionChanged信号,获取光标选中的文本

光标选中范围改变时触发,槽函数没有参数,没有直接传递改变的信息。

可以在信号触发后,访问输入框的textCursor对象,通过该对象可以获取光标选中范围的文本、和光标位置。

void Widget::on_textEdit_selectionChanged()//光标选中范围改变是触发selectionChanged信号
{QTextCursor cursor=ui->textEdit->textCursor();//文本光标对象qDebug()<<"selectionChanged:"<<cursor.selectedText();//获取光标选中的文本
}

例:cursorPositionChanged()信号,获取光标位置

void Widget::on_textEdit_cursorPositionChanged()//光标位置移动时触发
{QTextCursor cursor=ui->textEdit->textCursor();//文本光标对象qDebug()<<"cursorPositionChanged:"<<cursor.position();//获取光标的位置
}

例:undoAvailable(bool)和redoAvailable(bool)信号

 

void Widget::on_textEdit_undoAvailable(bool b)//undo状态改变时触发一次
{qDebug()<<"undoAvailable:"<<b;//
}void Widget::on_textEdit_redoAvailable(bool b)//redo状态改变时触发一次
{qDebug()<<"redoAvailable:"<<b;//
}

例:copyAvailable(bool b)信号

void Widget::on_textEdit_copyAvailable(bool b)//文本被选中/取消时触发
{qDebug()<<"copyAvailable:"<<b;
}

相关文章:

【Qt 常用控件】输入类控件1(QLineEdit和QTextEdit 输入框)

目录 1.QLineEdit 单行输入框 例&#xff1a;输入个人信息&#xff0c;通过按钮提交 例&#xff1a;为输入框设置验证器&#xff0c;检查输入的电话 例&#xff1a;验证两次输入的密码是否一致 例&#xff1a;是否显示密码按钮,toggled信号。 2.QTextEdit多行输入框 、QPl…...

openEuler22.03LTS系统升级docker至26.1.4以支持启用ip6tables功能

本文记录了openEuler22.03LTS将docker升级由18.09.0升级至26.1.4的过程&#xff08;当前docker最新版本为27.5.1&#xff0c;生产环境为保障稳定性&#xff0c;选择升级到上一个大版本26的最新小版本&#xff09;。 一、现有环境 1、系统版本 [rootlocalhost opt]# cat /etc…...

深入解析:如何利用 Java 爬虫按关键字搜索淘宝商品

在电商领域&#xff0c;通过关键字搜索商品是常见的需求。无论是商家分析竞争对手&#xff0c;还是消费者寻找心仪的商品&#xff0c;获取搜索结果中的商品信息都至关重要。本文将详细介绍如何利用 Java 爬虫按关键字搜索淘宝商品&#xff0c;并提供完整的代码示例。 一、Java…...

STM32上部署AI的两个实用软件——Nanoedge AI Studio和STM32Cube AI

1 引言 STM32 微控制器在嵌入式领域应用广泛&#xff0c;因为它性能不错、功耗低&#xff0c;还有丰富的外设&#xff0c;像工业控制、智能家居、物联网这些场景都能看到它的身影。与此同时&#xff0c;人工智能技术发展迅速&#xff0c;也逐渐融入各个行业。 把 AI 部署到 STM…...

C++ Primer 成员访问运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

芯科科技的BG22L和BG24L带来应用优化的超低功耗蓝牙®连接

全新的BG22L为常见蓝牙设备提供强大的安全性和处理能力&#xff0c;而BG24L支持先进的AI/ML加速和信道探测功能 2025年2月6日 – 致力于以安全、智能无线连接技术&#xff0c;建立更互联世界的全球领导厂商Silicon Labs&#xff08;亦称“芯科科技”&#xff0c;NASDAQ&#x…...

java后端开发面试常问

面试常问问题 1 spring相关 &#xff08;1&#xff09;Transactional失效的场景 <1> Transactional注解默认只会回滚运行时异常&#xff08;RuntimeException&#xff09;&#xff0c;如果方法中抛出了其他异常&#xff0c;则事务不会回滚&#xff08;数据库数据仍然插…...

‌双非硕士的抉择:自学嵌入式硬件开发还是深入Linux C/C++走软开?

今天给大家分享的是一位粉丝的提问&#xff0c;双非硕研一是自学嵌入式走偏硬件还是说深入学习Linuxc/c走软开呢&#xff1f; 接下来把粉丝的具体提问和我的回复分享给大家&#xff0c;希望也能给一些类似情况的小伙伴一些启发和帮助。 粉丝提问&#xff1a; 老师好&#xff…...

Windows系统使用Git教程详解

使用 Git 可以帮助开发人员更好地进行版本控制和团队协作&#xff0c;下面是 Windows 上 Git 的详细使用教程。 安装 Git 首先&#xff0c;你需要在 Windows 上安装 Git。你可以从 Git 官网下载最新的安装包&#xff08;https://git-scm.com/downloads&#xff09;&#xff0c;…...

Linux firewalld开启日志审计功能(2)

在Firewalld防火墙中启用和配置logdenied选项&#xff0c;记录被拒绝的数据包&#xff08;等同于开启日志功能&#xff09; 效果展示&#xff1a; 1.开启日志记录功能 firewall-cmd --set-log-deniedunicast #重新加载生效配置 firewall-cmd --reload 2.配置rsyslog捕获日志…...

【声音转文字CapsWriter】声音随时转化为文字,CapsWriter提高工作效率

文章目录 前言1. 软件与模型下载2. 本地使用测试3. 异地远程使用3.1 内网穿透工具下载安装3.2 配置公网地址3.3 修改config文件3.4 异地远程访问服务端 4. 配置固定公网地址4.1 修改config文件 5. 固定tcp公网地址远程访问服务端 前言 今天我要给大家安利一个神器——CapsWrit…...

深入理解小波变换:信号处理的强大工具

引言 在科学与工程领域&#xff0c;信号处理一直是关键环节&#xff0c;傅里叶变换与小波变换作为重要的分析工具&#xff0c;在其中发挥着重要作用。本文将深入探讨小波变换&#xff0c;阐述其原理、优势以及与傅里叶变换的对比&#xff0c;并通过具体案例展示其应用价值。 一…...

人机交互系统实验三 多通道用户界面

实验目的和要求 1)了解常见的多通道用户界面 2)查找资料&#xff0c;熟悉一种多通道用户界面并写出综述 实验环境 Windows10 实验内容与过程 (一) 实验内容: 要求上网查找资料&#xff0c;熟悉一种多通道用户界面并写出综述&#xff0c;可以是眼动跟踪、手势识别、 三维…...

Filter -> MaskFilter遮罩滤镜详解

MaskFilter 作用对象&#xff1a;MaskFilter 主要用于Paint的外观效果&#xff0c;给用Paint绘制的内容添加模糊或者浮雕效果应用效果&#xff1a; MaskFilter 处理位图的遮罩效果&#xff0c;影响绘制的边缘或整体形状主要用于模糊处理、浮雕效果等&#xff0c;通过影响绘制对…...

RK3568使用QT操作LED灯

文章目录 一、QT中操作硬件设备思路Linux 中的设备文件操作硬件设备的思路1. 打开设备文件2. 写入数据到设备3. 从设备读取数据4. 设备控制5. 异常处理在 Qt 中操作设备的典型步骤实际应用中的例子:控制 LED总结二、QT实战操作LED灯设备1. `mainwindow.h` 头文件2. `mainwindo…...

python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理

【1】引言 前序学习过程中&#xff0c;已经掌握了对图像的基本滤波操作技巧&#xff0c;具体的图像滤波方式包括均值滤波、中值滤波和高斯滤波&#xff0c;相关文章链接有&#xff1a; python学opencv|读取图像&#xff08;五十四&#xff09;使用cv2.blur()函数实现图像像素…...

为何实现大语言模型的高效推理以及充分释放 AI 芯片的计算能力对于企业级落地应用来说,被认为具备显著的研究价值与重要意义?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ AI 芯片&#xff1a;为人工智能而生的 “大脑” AI 芯片&#xff0c;又称人工智能加速器或计算卡&#xff0c;是专为加速人工智能应用&#xff0c;特别是深度学习任务设计的专用集成电路&#xff08;A…...

Android 约束布局ConstraintLayout整体链式打包居中显示

Android 用约束布局ConstraintLayout实现将多个控件视作一个整体居中显示&#xff0c;使用 app:layout_constraintHorizontal_chainStyle"packed"实现 chain 除了链条方向有横向和竖向区分外&#xff0c; chain链条上的模式有 3种 spread - 元素将被展开&#…...

在C#中,Array,List,ArrayList,Dictionary,Hashtable,SortList,Stack的区别

Array Array你可以理解为是所有数组的大哥 普通数组 : 特点是长度固定, 只能存储相同类型的数据 static void Main(string[] args){//声明int[] ints;string[] strings;People[] peoples;//默认值 //int 类型是 0//string 类型是 nullint[] ints1 { 1, 2, 3 };string[] …...

微服务知识——微服务架构的演进过程

文章目录 初始架构&#xff1a;单机架构第一次演进&#xff1a;Tomcat与数据库分开部署第二次演进&#xff1a;引入本地缓存和分布式缓存第三次演进&#xff1a;引入反向代理实现负载均衡第四次演进&#xff1a;数据库读写分离第五次演进&#xff1a;数据库按业务分库第六次演进…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...