问题:
使用QIntValidator正常,换为QDoubleValidator后不生效,看网上说的增加这行:setNotation(QDoubleValidator::StandardNotation);
好像也没什么作用,只好自己写了一个,目前测试感觉还行。
解决办法:
重载QDoubleValidator。
class MyDoublevalidator : public QDoubleValidator
{
Q_OBJECT
public:
MyDoublevalidator(QObject *parent = nullptr);
QValidator::State validate(QString &str, int &i) const;
};
MyDoublevalidator::MyDoublevalidator(QObject *parent)
{
}
QValidator::State MyDoublevalidator::validate(QString &str,int &i) const
{
qDebug() << "validate in: str" << str;
if(str == "-" || str == ""){
return Intermediate;
}
bool ok;
double number = str.toDouble(&ok);
if(!ok){
return Invalid;
}
// 判断小数点
int dotPos = str.indexOf('.');
if( (dotPos != -1) && (str.length()-dotPos - 1 > decimals()) ){
return Invalid;
}
// 区分负数还是正数
if(number >= 0)
{
if(number < bottom()){
return Intermediate;
}
if(number > top()){
return Invalid;
}
}
else
{ // 负数
if(number < bottom()){
return Invalid;
}
if(number > top()){
return Intermediate;
}
}
return Acceptable;
}