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