【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 单行输入框 例:输入个人信息,通过按钮提交 例:为输入框设置验证器,检查输入的电话 例:验证两次输入的密码是否一致 例:是否显示密码按钮,toggled信号。 2.QTextEdit多行输入框 、QPl…...

openEuler22.03LTS系统升级docker至26.1.4以支持启用ip6tables功能
本文记录了openEuler22.03LTS将docker升级由18.09.0升级至26.1.4的过程(当前docker最新版本为27.5.1,生产环境为保障稳定性,选择升级到上一个大版本26的最新小版本)。 一、现有环境 1、系统版本 [rootlocalhost opt]# cat /etc…...
深入解析:如何利用 Java 爬虫按关键字搜索淘宝商品
在电商领域,通过关键字搜索商品是常见的需求。无论是商家分析竞争对手,还是消费者寻找心仪的商品,获取搜索结果中的商品信息都至关重要。本文将详细介绍如何利用 Java 爬虫按关键字搜索淘宝商品,并提供完整的代码示例。 一、Java…...

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

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

芯科科技的BG22L和BG24L带来应用优化的超低功耗蓝牙®连接
全新的BG22L为常见蓝牙设备提供强大的安全性和处理能力,而BG24L支持先进的AI/ML加速和信道探测功能 2025年2月6日 – 致力于以安全、智能无线连接技术,建立更互联世界的全球领导厂商Silicon Labs(亦称“芯科科技”,NASDAQ&#x…...
java后端开发面试常问
面试常问问题 1 spring相关 (1)Transactional失效的场景 <1> Transactional注解默认只会回滚运行时异常(RuntimeException),如果方法中抛出了其他异常,则事务不会回滚(数据库数据仍然插…...
双非硕士的抉择:自学嵌入式硬件开发还是深入Linux C/C++走软开?
今天给大家分享的是一位粉丝的提问,双非硕研一是自学嵌入式走偏硬件还是说深入学习Linuxc/c走软开呢? 接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。 粉丝提问: 老师好ÿ…...
Windows系统使用Git教程详解
使用 Git 可以帮助开发人员更好地进行版本控制和团队协作,下面是 Windows 上 Git 的详细使用教程。 安装 Git 首先,你需要在 Windows 上安装 Git。你可以从 Git 官网下载最新的安装包(https://git-scm.com/downloads),…...

Linux firewalld开启日志审计功能(2)
在Firewalld防火墙中启用和配置logdenied选项,记录被拒绝的数据包(等同于开启日志功能) 效果展示: 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…...

深入理解小波变换:信号处理的强大工具
引言 在科学与工程领域,信号处理一直是关键环节,傅里叶变换与小波变换作为重要的分析工具,在其中发挥着重要作用。本文将深入探讨小波变换,阐述其原理、优势以及与傅里叶变换的对比,并通过具体案例展示其应用价值。 一…...
人机交互系统实验三 多通道用户界面
实验目的和要求 1)了解常见的多通道用户界面 2)查找资料,熟悉一种多通道用户界面并写出综述 实验环境 Windows10 实验内容与过程 (一) 实验内容: 要求上网查找资料,熟悉一种多通道用户界面并写出综述,可以是眼动跟踪、手势识别、 三维…...

Filter -> MaskFilter遮罩滤镜详解
MaskFilter 作用对象:MaskFilter 主要用于Paint的外观效果,给用Paint绘制的内容添加模糊或者浮雕效果应用效果: MaskFilter 处理位图的遮罩效果,影响绘制的边缘或整体形状主要用于模糊处理、浮雕效果等,通过影响绘制对…...
RK3568使用QT操作LED灯
文章目录 一、QT中操作硬件设备思路Linux 中的设备文件操作硬件设备的思路1. 打开设备文件2. 写入数据到设备3. 从设备读取数据4. 设备控制5. 异常处理在 Qt 中操作设备的典型步骤实际应用中的例子:控制 LED总结二、QT实战操作LED灯设备1. `mainwindow.h` 头文件2. `mainwindo…...

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

为何实现大语言模型的高效推理以及充分释放 AI 芯片的计算能力对于企业级落地应用来说,被认为具备显著的研究价值与重要意义?
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ AI 芯片:为人工智能而生的 “大脑” AI 芯片,又称人工智能加速器或计算卡,是专为加速人工智能应用,特别是深度学习任务设计的专用集成电路(A…...

Android 约束布局ConstraintLayout整体链式打包居中显示
Android 用约束布局ConstraintLayout实现将多个控件视作一个整体居中显示,使用 app:layout_constraintHorizontal_chainStyle"packed"实现 chain 除了链条方向有横向和竖向区分外, 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[] …...

微服务知识——微服务架构的演进过程
文章目录 初始架构:单机架构第一次演进:Tomcat与数据库分开部署第二次演进:引入本地缓存和分布式缓存第三次演进:引入反向代理实现负载均衡第四次演进:数据库读写分离第五次演进:数据库按业务分库第六次演进…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...