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

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108309582

长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:各种问题解决(点击传送门)

 

问题

开发时,对于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

 

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/108309582

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(技术Q群4597637)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值