关于 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

 


相关文章
|
Web App开发 人工智能 Android开发
iconfont.cn 阿里出品的矢量图标库
Iconfont.cn是阿里巴巴推出的矢量图标库,其中涵盖了1000多个常用图标,并在持续更新中。(目前已有7000+图标,部分图标为用户上传,因此默认不公开,但是可以搜索到。)
17130 0
iconfont.cn 阿里出品的矢量图标库
|
7月前
|
人工智能 开发工具 数据安全/隐私保护
无需坐班写代码!OpenClaw(Clawdbot)阿里云/本地部署+GitHub自动化,手机遥控 AI 助手开发
“躺在床上动动手指,就让AI完成代码编写、效果预览、仓库提交”——这不是科幻场景,而是2026年OpenClaw(原Clawdbot)的常规操作。作为具备全流程开发能力的AI代理工具,OpenClaw能无缝衔接GitHub,实现“克隆仓库→需求开发→启动服务预览→提交代码”的一条龙服务,搭配飞书等移动交互渠道,真正做到“随时随地发指令,AI全程代劳开发”。
2194 1
|
存储
Qt使用 QSetting 对 ini 配置文件进行操作
Qt使用 QSetting 对 ini 配置文件进行操作
1903 0
|
12月前
|
Ubuntu 编译器 计算机视觉
Ubuntu 20.04环境下无法找到#include<opencv/cv.h>文件 - 解决方案。
希望这些信息能帮助你解决遇到的问题。
596 10
(5)Qt中的日期和时间
本文介绍了Qt中处理日期和时间的类QDate、QTime和QDateTime,包括它们的格式化选项、构造函数、公共成员函数以及如何进行日期和时间的增减、比较,同时提到了QElapsedTimer作为QTime的替代品用于计时。
1573 0
|
Java 编译器 C语言
【C/C++】 switch-case 详解/全面总结
关于 C语言/C++ 中,switch-case 的尽量详细和全面的解释与总结
5374 0
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
4007 2
(10)QWidget的使用(one)
文章介绍了QWidget的使用,包括如何获取和设置QWidget的大小和位置、设置窗口固定大小、限定窗口大小、坐标系统转换、内容边距、鼠标指针形状以及自定义光标的使用。
790 0
(10)QWidget的使用(one)
|
Rust 监控 网络协议
EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文
本文介绍了IgH EtherCAT Master整体运行原理
3515 0
EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文
|
前端开发 搜索推荐 API
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
【Qt 学习笔记】QWidget的styleSheet属性 | RGB | 在线调色板
1620 5