【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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bash (Bourne-Again Shell)、Zsh (Z Shell)

文章目录 1. 历史背景2. 主要区别3. 功能对比自动补全插件和主题路径扩展提示符定制 4. 性能5. 使用场景6. 如何切换 Shell7. 总结 以下是 Bash 和 Zsh 之间的主要区别&#xff0c;列成表格方便对比&#xff1a; 特性BashZsh默认Shell大多数Linux发行版默认ShellmacOS默认She…

Jetbrains IDE http客户端使用教程

简介 JetBrains IDE&#xff08;如IntelliJ IDEA&#xff0c; WebStorm&#xff0c; PhpStorm和PyCharm&#xff09;自带一个内置的HTTP客户端&#xff0c;允许直接从IDE发送HTTP请求&#xff0c;而无需使用第三方工具&#xff0c;如Postman或cURL。 JetBrains IDE 中的 HTTP…

android手机安装deepseek-r1:1.5b

序 本文主要展示一下如何在android手机上安装deepseek-r1:1.5b 步骤 安装termux 到https://termux.dev/cn/index.html去下载 然后执行termux-setup-storage以获取手机存储权限 安装构建依赖 pkg install git cmake golang下载ollama git clone --depth 1 https://gitee.…

U3D支持webgpu阅读

https://docs.unity3d.com/6000.1/Documentation/Manual/WebGPU-features.html 这里看到已经该有的差不多都有了 WOW VFX更是好东西 https://unity.com/cn/features/visual-effect-graph 这玩意儿化简了纯手搓一个特效的流程 如果按原理说就是compute shader刷position&#…

PWM波形输出

一、想要达到的效果 二、实现代码 因为是在1khz的频率下&#xff0c;所以用重新配置定时器0&#xff0c;定时长度为100微妙 void Timer0Init(void) //100微秒12.000MHz {AUXR | 0x80; //定时器时钟1T模式TMOD & 0xF0; //设置定时器模式TL0 0x50; //设置定时初值TH0 …

Spring Boot整合MQTT

MQTT是基于代理的轻量级的消息发布订阅传输协议。 1、下载安装代理 进入mosquitto下载地址&#xff1a;Download | Eclipse Mosquitto&#xff0c;进行下载&#xff0c;以win版本为例 下载完成后&#xff0c;在本地文件夹找到下载的代理安装文件 使用管理员身份打开安装 安装…

前端 CSS 动态设置样式::class、:style 等技巧详解

一、:class 动态绑定类名 v-bind:class&#xff08;缩写为 :class&#xff09;可以动态地绑定一个或多个 CSS 类名。 1. 对象语法 通过对象语法&#xff0c;可以根据条件动态切换类名。 <template><div :class"{ greenText: isActive, red-text: hasError }&…

TCP三次握手全方面详解

文章目录 (1) 三次握手各状态CLOSE状态SYN_SENT状态SYN_RECV状态ESTABLISHED状态 (2) 为什么握手时的seqnum是随机值&#xff0c;以及acknum的功能(3) 三次握手中的半连接队列&#xff08;SYN队列&#xff09;和全连接队列&#xff08;ACCEPT队列&#xff09;半连接队列全连接队…

基于Java的远程视频会议系统(源码+系统+论文)

第一章 概述 1.1 本课题的研究背景 随着人们对视频和音频信息的需求愈来愈强烈&#xff0c;追求远距离的视音频的同步交互成为新的时尚。近些年来&#xff0c;依托计算机技术、通信技术和网络条件的发展&#xff0c;集音频、视频、图像、文字、数据为一体的多媒体信息&#xff…

Docker Desktop安装到其他盘

Docker Desktop 默认安装到c盘&#xff0c;占用空间太大了&#xff0c;想给安装到其他盘&#xff0c;网上找了半天的都不对 正确安装命令&#xff1a; start /w "" "Docker Desktop Installer.exe" install --installation-dirF:\docker命令执行成功&am…

手动配置IP

手动配置IP&#xff0c;需要考虑四个配置项&#xff1a; 四个配置项 IP地址、子网掩码、默认网关、DNS服务器 IP地址&#xff1a;格式表现为点分十进制&#xff0c;如192.168.254.1 子网掩码&#xff1a;用于区分网络位和主机位 【子网掩码的二进制表达式一定是连续的&#…

Qt:常用控件

目录 控件概述 控件体系的发展 按钮类控件 QPushButton QRadioButton QCheckBox QToolButton 显示类控件 QLabel QLCDNumber QProgressBar QCalendarWidget 输入类控件 QLineEdit QTextEdit QComboBox QSpinBox QDateEdit & QTimeEdit QDial QSlider …

【漫话机器学习系列】087.常见的神经网络最优化算法(Common Optimizers Of Neural Nets)

常见的神经网络优化算法 1. 引言 在深度学习中&#xff0c;优化算法&#xff08;Optimizers&#xff09;用于更新神经网络的权重&#xff0c;以最小化损失函数&#xff08;Loss Function&#xff09;。一个高效的优化算法可以加速训练过程&#xff0c;并提高模型的性能和稳定…

4G核心网的演变与创新:从传统到虚拟化的跨越

4G核心网 随着移动通信技术的不断发展&#xff0c;4G核心网已经经历了从传统的硬件密集型架构到现代化、虚拟化网络架构的重大转型。这一演变不仅提升了网络的灵活性和可扩展性&#xff0c;也为未来的5G、物联网&#xff08;LOT&#xff09;和边缘计算等技术的发展奠定了基础。…

拉格朗日插值法的matlab实现

一、基本原理 比如有如下这些点 x1x2x3x4y1y2y3y4 那么在拉个朗日原理中可以把过这些点的曲线表示为&#xff1a; 其g(x)y叫做一个插值基函数&#xff08;开关&#xff09;&#xff0c;当xx1时&#xff0c;g1(x)1&#xff0c;而当xx2,x3,x4时&#xff0c;g1(x)都为0&#xf…

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦&#xff01;?? 基本配置 打包工具&#xff1a;Vite 前端框架&#xff1a;ElementPlus 开发语言&#xff1a;Vue3、TypeScript、Sass 代码检查&#xff1a;ESLint、Prettier IDE&#xff1a;WebSt…

35~37.ppt

目录 35.张秘书-《会计行业中长期人才发展规划》 题目​ 解析 36.颐和园公园&#xff08;25张PPT) 题目​ 解析 37.颐和园公园&#xff08;22张PPT) 题目 解析 35.张秘书-《会计行业中长期人才发展规划》 题目 解析 插入自定义的幻灯片&#xff1a;新建幻灯片→重用…

day44 QT核心机制

头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QLabel> //标签类头文件 #include<QPushButton> //按钮类头文件 #include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …

kafka服务端之副本

文章目录 概述副本剖析失效副本ISR的伸缩LWLEO与HW的关联LeaderEpoch的介入数据丢失的问题数据不一致问题Leader Epoch数据丢失数据不一致 kafka为何不支持读写分离 日志同步机制可靠性分析 概述 Kafka中采用了多副本的机制&#xff0c;这是大多数分布式系统中惯用的手法&…

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…