关于 QLineEdit设置QDoubleValidator设置范围无效问题 的解决方法

简介: 关于 QLineEdit设置QDoubleValidator设置范围无效问题 的解决方法

问题

开发时,对于QLineEdit设置其值有限输入范围限制。

QLineEdit设置QDoubleValidator无效,设置QIntValidator有效。

 

无效代码与有效代码

#if 0
// 浮点数无效代码
    ui->lineEdit_t->setValidator(new DoubleValidator(40, 80, 1);
#else
// 浮点数有效代码
    QDoubleValidator * doubleValidator = new QDoubleValidator(40, 80, 1);
    doubleValidator->setNotation(QDoubleValidator::StandardNotation);
    ui->lineEdit_t->setValidator(doubleValidator);
#end
// 整数有效代码
    ui->lineEdit_coverT->setValidator(new QIntValidator(0, 110));

补充(2021年05月17日)

以上方法,确实只能显示输入的位数,因为笔者是限定整数范围内的浮点数,所以忽略了,要限制浮点数带小数的,重载一下。

特别注意:比如限制1.0-10,那么QLineEdit使用之后可以输入“10.”,作为字符串转为double为10,但作为字符串存入的时候注意.的问题

#ifndef MYDOUBLEVALIDATOR_H
#define MYDOUBLEVALIDATOR_H
#include <QDoubleValidator>
class MyDoubleValidator: public QDoubleValidator
{
public:
    MyDoubleValidator(double bottom, double top, int decimals, QObject * parent = 0) :
        QDoubleValidator(bottom, top, decimals, parent)
    {
    }
    QValidator::State validate(QString &s, int &i) const
    {
        if (s.isEmpty() || s == "-") {
            return QValidator::Intermediate;
        }
        QChar decimalPoint = locale().decimalPoint();
        if(s.indexOf(decimalPoint) != -1) {
            int charsAfterPoint = s.length() - s.indexOf(decimalPoint) - 1;
            if (charsAfterPoint > decimals()) {
                return QValidator::Invalid;
            }
        }
        bool ok;
        double d = locale().toDouble(s, &ok);
        if (ok && d >= bottom() && d <= top()) {
            return QValidator::Acceptable;
        } else {
            return QValidator::Invalid;
        }
    }
};
#endif // MYDOUBLEVALIDATOR_H

 


相关文章
|
网络协议 计算机视觉
项目实战:Qt多人聊天室程序(在线、离线、离线信息再次登录后发送等)
项目实战:Qt多人聊天室程序(在线、离线、离线信息再次登录后发送等)
项目实战:Qt多人聊天室程序(在线、离线、离线信息再次登录后发送等)
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
431 3
python知识点100篇系列(15)-加密python源代码为pyd文件
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
2279 3
【qt】Tool Box组件
【qt】Tool Box组件
265 0
|
数据安全/隐私保护
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Line Edit的使用及说明
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Line Edit的使用及说明
1898 0
Pyside6-第二篇-QPushButton一个普通按钮
Pyside6-第二篇-QPushButton一个普通按钮
558 0
|
存储
QT基础入门——QMainWindow与对话框QDialog(三)
QT基础入门——QMainWindow与对话框QDialog(三)
1451 0
QT基础入门——QMainWindow与对话框QDialog(三)
|
Linux 图形学
深入理解Qt定时器:QTimer的魅力与挑战(一)
深入理解Qt定时器:QTimer的魅力与挑战
7983 0
|
缓存 算法 Linux
深入理解Linux动态库加载:路径、问题与解决方案
深入理解Linux动态库加载:路径、问题与解决方案
3613 0
|
存储 安全 数据库连接
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
881 0