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

QT QLineEdit 控件输入验证

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.kler.cn/a/321949.html

相关文章:

  • 网站升级成https后websocket调用报错了
  • springboot在线教学平台
  • Vxe UI vue 使用 vxe-tabs 页签实现右侧操作按钮、关闭所有页签、关闭右侧、关闭左侧
  • 从android-webview播放video标签黑屏谈起
  • 前台项目启动/打包报错 Error: error:0308010C:digital envelope routines::unsupported
  • 教你如何在Java中操作Redis
  • 总结下android性能提升方案
  • 替代TPS7A11超高PRSS低噪声低静态低压差稳压器LDO
  • 传奇微端黑屏不更新地图?传奇微端架设教程——GOM引擎
  • matlab恢复默认窗口布局
  • 大模型分布式训练并行技术(七)-自动并行
  • Vue入门之生命周期
  • 计算机网络回顾
  • 数据分析入门
  • STM32精确控制步进电机
  • DK5V100R10VL贴片TO252功率12V4.3A同步整流芯片
  • 1.快速排序算法【分治】
  • python面向对象三大特性
  • 避免glibc版本而报错,CentOS等Linux安装node.js完美方法
  • 如何使用Optuna在PyTorch中进行超参数优化