QT QLineEdit 控件输入验证

news/2024/9/28 17:17:25/

QT QLineEdit 控件输入验证

一、格式掩码

  void setInputMask(const QString &inputMask);
    使 QLineEdit 控件只允许输入自定义的格式字符串,具体自定义组合用到的字符如下:

A		ASCII 字母。A-Z、a-z;不可用空格填充。
a		ASCII 字母。A-Z、a-z;可用空格填充。
N		ASCII 字母、数字。A-Z、a-z、0-9;不可用空格填充。
n		ASCII 字母、数字。A-Z、a-z、0-9;可用空格填充。
X		任何字符;不可用空格填充。
x		任何字符;可用空格填充。
9		ASCII 数字,0 - 9;不可用空格填充。
0		ASCII 数字,0 - 9;可用空格填充。
D		ASCII 数字,1 - 9;不可用空格填充。
d		ASCII 数字,1 - 9;可用空格填充。
#		ASCII 正负数字;可用空格填充。
H		十六进制字符;不可用空格填充。
h		十六进制字符;可用空格填充。
B		二进制字符,0 - 1;不可用空格填充
b		二进制字符,0 - 1;可用空格填充
>		该符号之后所有字母全大写
<		该符号之后所有字母全小写
...

  比较常用的可以用于 IP 地址的自定义,如下:

ui.lineEditInputMaks->setInputMask("000.000.000.000;_");//;_表示前面没有写的使用 _ 来填充

二、格式校验

  setValidator(QValidator) 为 QLineEdit 设置校验器,只允许输入允许或指定的数据,比如整数、浮点数、正则表达式
  (1) 进行整数与浮点数的校验
    QVaildator :用于用于只能输入允许的或者指定的数据,调用其子类来进行对应的数据操作,下面指定了其子类与其常用方法:
      QIntValidator:QVaildator 子类,用于设定整型校验器
        setRange(start, end) 其子类中的方法,设置数字范围
      QDoubleValidator:QVaildator 子类,用于设定浮点型校验器
        setRange(start, end) 其子类中的方法,设置数字范围
        setRange(start, end, dic) 其子类中的方法,设置数字范围,并设置 小数点后几位
         setDecimals 其子类中的方法,设置小数点位数
         setNotation 设置其计数方式,默认为科学技术法,会导致我们输入数据我们看到的是输入一长串数字都可以,且超出了我们指定的范围,所以我们需要调用 setNotation 方法来修改。
          enum Notation {
            StandardNotation,//普通计数法
            ScientificNotation//科学计数法
          };
    代码演示:
      ①整型校验器,如下:

//设置整型校验器
//整型校验器声明
QIntValidator* intV = new QIntValidator();
intV->setRange(0, 200);//设置输入范围
//指定校验器
ui.lineEdit_EidtChanged->setValidator(intV);

      ②浮点型校验器,如下:

//浮点型校验器声明
QDoubleValidator* doubleV = new QDoubleValidator();
doubleV->setRange(0, 200, 3);//设置输入范围以及小数点后几位
//设置计数法为普通计数法
doubleV->setNotation(QDoubleValidator::StandardNotation);
//指定校验器
ui.lineEdit_EidtChanged->setValidator(doubleV);

  (2) 正则表达式进行校验
    在 QT 6.0版本 之前使用 QRegExpValidator 类来创建一个正则表达式验证器,但是在 QT 6.0版本 之后,这个类就不能用了,也就是说需要使用另外一个类:QRegularExpressionValidator,这里以 QT 6.0之后的版本为主介绍:
      QRegularExpressionValidator:    创建一个正则表达式验证器
      代码演示(以邮箱验证为演示):

QRegularExpression regExp("[a-zA-Z0-9-]+@[a-zA-Z0-9-_]+\\.[a-zA-Z]+");
QRegularExpressionValidator* regExpValidator = new QRegularExpressionValidator(regExp);
ui.lineEdit_EidtChanged->setValidator(regExpValidator);

    【注意】如果对于一个 QLineEdit 设置正则表达式,比如上面,如果我输入一个邮箱,但是并没有输入完,这个时候这个邮箱如果被保存到后台数据库,下次在使用时肯定会有错误,所以对于正则表达式需要加一个书写完成后的验证,格式如下:

//校验正则表达式是否正确
//获取到 lineEdit_EidtChanged的校验器
const QValidator* validator = ui.lineEdit_EidtChanged->validator();
int pos = 0;//获取到校验开始位置
QString str = ui.lineEdit_EidtChanged->text();//获取到需要校验的文本
/*
enum State {Invalid,//不合法Intermediate,//没有输入结束,例如 1wqw@qq.Acceptable//合法
};
*/
QValidator::State state = validator->validate(str, pos);//进行校验
//判断是否校验成功
if (state == QValidator::Acceptable)
{ui.labelValidator->setText(ui.lineEditRegExp->text());
}
else 
{ui.labelValidator->setText(QString::fromLocal8Bit("验证失败,请输入正确的字符"));
}

    这里通过 QLineEdit 中的 validator() 方法获取到其校验器,然后通过校验器重新校验一下该 QLineEdit 控件的文本,通过枚举 State 判断是否正确。


http://www.ppmy.cn/news/1531574.html

相关文章

基于微信小程序爱心领养小程序设计与实现(源码+参考文档+定制开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

SSM超市售卖管理系统-计算机毕业设计源码23976

目 录 摘要 Abstract 1 绪论 1.1研究的背景和意义 1.2研究内容 1.3论文结构与章节安排 2 开发技术介绍 2.1 SSM框架 2.2 MySQL数据库 3 超市售卖管理系统系统分析 3.1 可行性分析 3.2 系统流程分析 3.2.1 数据流程 3.3.2 业务流程 3.3 系统功能分析 3.3.1 功…

DERT目标检测源码流程图main.py的执行

DERT目标检测源码流程图main.py的执行 官网预测脚本 补充官网提供的预测部分的代码信息。 from PIL import Image import requests import matplotlib.pyplot as pltimport torch from torch import nn from torchvision.models import resnet50 import torchvision.transform…

力扣题解2207

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;中等&#xff09;​&#xff1a; 字符串中最多数目的子序列 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern &#xff0c;两者都只包…

【计算机视觉】YoloV8-训练与测试教程

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 制作数据集 Labelme 数据集 数据集选用自己标注的&#xff0c;可参考以下&#xff1a…

HTML·第三章课后练习题

采用表格布局完成“CASIO计算器”外观设计&#xff0c;其中表格的每一个单元格均需要设计带边框 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

【R语言】fs 工具功能速查

文件操作 文件操作函数作用file_copy() dir_copy() link_copy()复制文件、目录、链接file_create() dir_create() link_create()创建文件、目录、链接file_delete() dir_delete() link_delete()删除文件、目录、链接file_access() file_exists() dir_exists() link_exists()文…

【Web】御网杯信息安全大赛2024 wp(全)

目录 input_data admin flask 如此多的FLAG 一夜醒来之全国CTF水平提升1000倍&#x1f60b; input_data 访问./.svn后随便翻一翻拿到flag admin dirsearch扫出来 访问./error看出来是java框架 测出来是/admin;/路由打Spring View Manipulation(Java)的SSTI https:/…