【Qt】输入类控件QLineEdit

目录

 输入类控件QLineEdit

例子:录入个人信息

例子:使用正则表达式验证输入框的数据

例子:验证俩次输入密码一致

例子:切换显示代码


 输入类控件QLineEdit

  • QLineEdit 用来表示单行输入框,可以输入一段文本,但是不能换行

核心属性

属性说明

text

输⼊框中的⽂本

inputMask

输⼊内容格式约束

maxLength

最⼤⻓度

frame

是否添加边框

echoMode

显⽰⽅式.

  • QLineEdit::Normal :这是默认值,⽂本框会显⽰输⼊的⽂本。
  • QLineEdit::Password :在这种模式下,输⼊的字符会被隐藏,通常⽤星号(*)或等号(=)代替。
  • QLineEdit::NoEcho :在这种模式下,⽂本框不会显⽰任何输⼊的字符。

cursorPosition

光标所在位置

alignment

⽂字对⻬⽅式, 设置⽔平和垂直⽅向的对⻬.

dragEnabled

是否允许拖拽

readOnly

是否是只读的(不允许修改)

placeHolderText

当输⼊框内容为空的时候, 显⽰什么样的提⽰信息

clearButtonEnabled

是否会⾃动显⽰出 "清除按钮".

text属性,不仅仅可以通过代码来设置,用户在输入框中进行编辑,也会影响到text值的变化

(1)通过代码中设置text,界面上的文本会发生变化

(2) 直接操作修改界面上的文本(输入框、可以编辑的),text属性的值也会发生改变。

placeHolderText可以起到“提示作用”

当输入框为空的时候,没有任何内容的时候,提示信息才会存在。

一旦用户在这里进行任何动作输入,这个提示信息就会消失。  

clearButtonEnabled可以显示清空按钮!

如果输入框为空,此时没有任何显示。

当输入框有内容的时候,右侧就会出现一个类似于删除的按钮,点击按钮就会立即将输入框里面的内容清空。 

核心信号

属性说明

void cursorPositionChanged(int old, int new)

当⿏标移动时发出此信号,old为先前的位置,new为新位置。

void editingFinished()

当按返回或者回⻋键时,或者⾏编辑失去焦点时,发出此信号

void returnPressed()

当返回或回⻋键按下时发出此信号.

如果设置了验证器, 必须要验证通过, 才能触发.

void selectionChanged()

当选中的⽂本改变时,发出此信号。

void textChanged(const QString &text)

当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。

代码对⽂本的修改能够触发这个信号.

void textEdited(const QString &text))

当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。

代码对⽂本的修改不能触发这个信号.

例子:录入个人信息

让用户输入信息:

(1)姓名

(2)密码

(3)性别

(4)电话

通过提交按钮,把上述内容给统一获取到

使用Qt Designer进行初步设计,并修改objectName

#include "widget.h"
#include "ui_widget.h"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->setClearButtonEnabled(true);ui->lineEdit_password->setEchoMode(QLineEdit::Password);//初始化电话输入框ui->lineEdit_telephone->setPlaceholderText("请输入电话号码");ui->lineEdit_telephone->setClearButtonEnabled(true);ui->lineEdit_telephone->setInputMask("00000000000");
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{QString gender = ui->radioButton_male->isChecked() ? "男" : "女";ui->label_information->setText("姓名:" + ui->lineEdit_name->text() + "\n""密码:" + ui->lineEdit_password->text() + "\n""性别:" + gender + "\n""电话号码:" + ui->lineEdit_telephone->text() + "\n");
}

例子:使用正则表达式验证输入框的数据

在上一个例子中,验证电话号码的方式是使用inputMask,其功能比较有限,只能进行简单的验证,假设你输入:9999999999都是验证成功。

此时就需要“正则表达式”

“正则表达式”式计算机中的通用概念,和具体的编程语言无关。

正则表达式,本质上就是一个带有特殊字符的字符串,特殊字符用来表示另一个字符串的特征,此时就可以借助正则表达式来描述一些具有一定特定的字符串。

        基于这些特点,就可以完成字符串的匹配。

正则表达式文档:

正则表达式语法icon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2008/ae5bf541(v=vs.90)?redirectedfrom=MSDN正则表达式测试工具:

正则表达式测试工具icon-default.png?t=N7T8https://regextester.buyaocha.com/

此处的规则是:输入框要检查输入的内容是否是合法的手机号码。

如果是,则按钮设置为可用状态。

如果不是,则设置为禁用状态。

(1)在界面上设置一个输入框和按钮

(2)将按钮初始enabled设置成false

(3)给输入框设置验证器

使⽤ QRegExpValidator 创建⼀个验证器对象. Qt 中内置了四个主要的验证器对象

 

"^1\\d{d}$"

这是一段简单的验证手机号码的正则表达式。

^ 表示以XXX开头。

^ 后面紧跟着数字1,意思就是以1开头。

\d 表示数字,为了在C++字符串中使用,需要写作 \\d

{10}表示前面的内容重复出现了10次,\d数字要重复出现10次。

$ 表示结尾。

这里只是注册了一个验证器,下面还需要编写代码进行验证器的使用。

 (4)给 lineEdit 添加 textEdited 信号的 slot 函数

  • on_lineEdit_textEdited 的参数是当前输⼊框的内容.
  • 通过 lineEdit->validator() 获取到内置的验证器.

  • 通过 validate ⽅法验证⽂本是否符合要求

  • 第一个参数,是要验证的字符串,参数类型是QString&,不是const,需要将这个变量复制。
  • 第⼆个参数是⼀个 int&, 是输出型参数. 当验证的字符串不匹配时, 返回这个字符串的⻓度. (没有什么实质作⽤).{在这段代码中,pos 在这里通常被设置为 0 是因为你想要从输入内容的起始位置开始进行验证。}
  • 返回值是⼀个枚举. QValidator::Acceptable 表⽰验证通过, QValidator::Invalid 表⽰验证不通过.
#include "widget.h"
#include "ui_widget.h"#include<QRegExpValidator>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//将按钮初始enabled设置为falseui->pushButton->setEnabled(false);//基于正则表达式进行验证QRegExp regExp("^1\\d{10}$");//给单行输入框设置验证器ui->lineEdit->setValidator(new QRegExpValidator(regExp));
}Widget::~Widget()
{delete ui;
}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信号,来触发对于俩个输入框内容的判定。

接下来,结合之前的知识,来一次整合!!!

(1)设置俩个输入框,三个文本框 

(2)编写代码 

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置最上面的文本ui->label_1->setText("请设置密码:");//初始化第一个输入框ui->lineEdit_1->setPlaceholderText("请输入新密码");ui->lineEdit_1->setEchoMode(QLineEdit::Password);ui->lineEdit_1->setClearButtonEnabled(true);//设置第二个文本为空ui->label_2->setText(" ");//设置第二个输入框ui->lineEdit_2->setPlaceholderText("验证新密码");ui->lineEdit_2->setEchoMode(QLineEdit::Password);ui->lineEdit_2->setClearButtonEnabled(true);//设置迪桑文本为空ui->label_3->setText(" ");}Widget::~Widget()
{delete ui;
}void Widget::on_lineEdit_1_textEdited(const QString &arg1)
{(void) arg1;QString s1 = ui->lineEdit_1->text();QString s2 = ui->lineEdit_2->text();if(!s1.isEmpty()){ui->label_2->setText("密码正确");ui->label_2->setStyleSheet("color: green;");}
}void Widget::on_lineEdit_2_textEdited(const QString &arg1)
{(void) arg1;QString s1 = ui->lineEdit_1->text();QString s2 = ui->lineEdit_2->text();if(!s2.isEmpty()){if(s1 == s2){ui->label_3->setText("密码正确");ui->label_3->setStyleSheet("color: green;");}else{ui->label_3->setText("密码错误");ui->label_3->setStyleSheet("color: red;");}}
}

 

上述例子中,俩次的参数都没有使用。

但是编译器在检查的时候会提出警告,所以可以将在函数内部写出:

(void) arg1;

这个写法就是类型转换,这个写法对于代码的实际逻辑是没有任何影响的,可以骗过编译器。

例子:切换显示代码

代码展示:

#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{//false,表示需要隐藏密码ui->lineEdit->setEchoMode((QLineEdit::Password));}
}

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

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

相关文章

Go 文件操作基本方法大全

前言 在Go语言中&#xff0c;操作文件主要依赖于标准库中的os和io/ioutil&#xff08;注意&#xff1a;io/ioutil在Go 1.16及以后版本中被逐步弃用&#xff0c;推荐使用io和os包中的函数进行替代&#xff09;以及io和bufio等包。以下是一些基于这些基本库操作文件的方法大全&a…

Python和MATLAB谐波生成导图

&#x1f3af;要点 绘制三次谐波生成透射功率谱、对数对数图表示半导体曲面二次谐波生成&#xff0c;分析判断材料特性谐波均值估计计算边际似然&#xff08;贝叶斯统计&#xff09;二次谐波散射分析胶体染料分子结构交流电谐波波形傅立叶分析分析旋转各向异性谐波高次谐波非线…

appium下载及安装

下载地址&#xff1a;https://github.com/appium/appium-desktop/releases 双击安装就可以

深入学习SQL优化的第三天

目录 聚合函数 排序和分组 聚合函数 1251. 平均售价 表&#xff1a;Prices------------------------ | Column Name | Type | ------------------------ | product_id | int | | start_date | date | | end_date | date | | price | int …

桌球厅助教陪练系统源码开发和行业市场分析

台球助教陪练系统&#xff1a;引领智能化运动体验 作为一款专为台球爱好者设计的智能陪练系统&#xff0c;我们的目标是通过技术创新&#xff0c;让每位用户都能享受到个性化、高效的学习体验。无论是初学者还是寻求突破的高手&#xff0c;都能在我们的平台上找到适合自己的陪…

基于YOLO V8的PCB缺陷检测识别系统(python源码+Pyqt5界面+数据集+训练代码)

数据集准备&#xff1a;收集并标注PCB缺陷的图像。模型训练&#xff1a;使用YOLO v8框架训练一个模型来识别这些缺陷。GUI开发&#xff1a;利用PyQt5创建一个用户友好的图形界面。模型部署&#xff1a;在GUI中集成训练好的模型&#xff0c;使用户能够上传PCB图像并得到缺陷检测…

IOS 11 通用Base控制器封装

整体规划 BaseController&#xff1a;把viewDidLoad逻辑拆分为三个方法&#xff0c;方便管理。 BaseCommonController&#xff1a;不同项目可以复用的逻辑&#xff0c;例如&#xff1a;设置背景颜色方法等 BaseLogicController&#xff1a;本项目的通用逻辑&#xff0c;主要…

实现 FastCGI

CGI的由来&#xff1a; 最早的 Web 服务器只能简单地响应浏览器发来的 HTTP 请求&#xff0c;并将存储在服务器上的 HTML 文件返回给浏 览器&#xff0c;也就是静态 html 文件&#xff0c;但是后期随着网站功能增多网站开发也越来越复杂&#xff0c;以至于出现动态技 术&…

【Pyhthon读取 PDF文件表格 ,转为 CSV/TSV/JSON文件】

tabula-py tabula-py 是一个将 PDF 表格转换为 pandas DataFrame 的工具。 tabula-py 是 tabula-java 的包装器&#xff0c;需要您的机器上有 java。 tabula-py 还允许您将 PDF 中的表格转换为 CSV/TSV 文件。 tabula-py 的 PDF 提取准确度与 tabula-java 或 tabula app 相…

8月21日笔记

Frp Frp(Fast e Reverse ) Proxy) 是一款简单&#xff0c;好用&#xff0c;稳定的隧道工具。Frp 使用 Go语言开发&#xff0c;支持跨平台&#xff0c;仅需下载对应平台的二进制文件即可执行&#xff0c;没有额外依赖。它是一款高性能的反向代理应用&#xff0c;可以轻松地进行…

Spring DI 数据类型—— set 方法注入

首先新建项目&#xff0c;可参考 初识IDEA、模拟三层--控制层、业务层和数据访问层 一、spring 环境搭建 &#xff08;一&#xff09;pom.xml 导相关坐标 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.or…

http连接未释放导致生产故障

凌晨4点运维老大收到报警&#xff08;公司官网页面超时&#xff0c;上次故障因为运维修改nginx导致官网域名下某些接口不可用后&#xff0c;运维在2台nginx服务器上放了检测程序&#xff0c;检测官网页面&#xff09;&#xff0c;运维自己先看了看服务器相关配置&#xff0c;后…

Java实现STL中的全排列函数next_permutation()

目录 一、引言 二、全排列函数next_permutation() 三、next_permutation()的使用 四、Java实现next_permutation() 五、使用next_permutation()实现全排列 一、引言 相信很多小伙伴们都做过全排列的算法题&#xff0c;输入一个n&#xff0c;输出1~n的全排列。对于这个问题…

JVM 有哪些垃圾回收器?

JVM 有哪些垃圾回收器&#xff1f; 图中展示了7种作用于不同分代的收集器&#xff0c;如果两个收集器之间存在连线&#xff0c;则说明它们可以搭配使用。虚拟机所处的区域则表示它是属于新生代还是老年代收集器。 新生代收集器&#xff08;全部的都是复制算法&#xff09;&…

【安全靶场】-DC-7

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 一、收集信息 1.查看主机是否存活 nmap -T4 -sP 192.168.216.149 2.主动扫描 看开放了哪些端口和功能 n…

【网络】UDP和TCP之间的差别和回显服务器

文章目录 UDP 和 TCP 之间的差别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP API 的使用UDP APIDatagramSocket构造方法方法 DatagramPacket构造方法方法 回显服务器&#xff08;Echo Server&#xff09;1. 接收请求2. 根据请求计算响应3. 将…

黑马头条vue2.0项目实战(十一)——功能优化(组件缓存、响应拦截器、路由跳转与权限管理)

1. 组件缓存 1.1 介绍 先来看一个问题&#xff1f; 从首页切换到我的&#xff0c;再从我的回到首页&#xff0c;我们发现首页重新渲染原来的状态没有了。 首先&#xff0c;这是正常的状态&#xff0c;并非问题&#xff0c;路由在切换的时候会销毁切出去的页面组件&#xff…

Java之HashMap的底层实现

Java之HashMap的底层实现 摘要HashMap的底层原理哈希值转换为数组下标节点初始化put(Object key, Object value)重写toString()get(Object key)增加泛化remove(K key) 摘要 本博客主要讲述了Java的HashMap的底层实现 HashMap的底层原理 底层原理&#xff1a;数组链表 过程…

【C/C++】菱形继承问题

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【JAVA CORE_API】Day18 网络编程、线程、在线聊天室v1.0

C/S&#xff1a;客户端/服务器端&#xff0c;所有网络应用都是基于客户端服务器端进行的&#xff0c;Java写的是服务端&#xff0c;客户端是一个软件&#xff0c;服务端也是一个软件&#xff0c;两个软件之间交互&#xff1b;&#xff08;只能连接对应的服务器&#xff09; B/…