다음 사용자 정의 검사기를 사용하십시오.
헤더 :
#ifndef VALIDATOR_H
#define VALIDATOR_H
#include <QValidator>
class Validator : public QValidator
{
Q_OBJECT
public:
explicit Validator(QObject *parent = 0);
signals:
public slots:
public:
QValidator::State validate(QString & input, int & pos) const;
};
#endif // VALIDATOR_H
CPP :
#include "validator.h"
#include <QDoubleValidator>
#include <QDebug>
Validator::Validator(QObject *parent) :
QValidator(parent)
{
}
QValidator::State Validator::validate(QString &input, int &pos) const
{
qDebug() << input<< pos;
QDoubleValidator val;
val.setLocale(QLocale(QLocale::German,QLocale::Germany));
input.remove(" ");
QStringList list = input.split(",");
foreach (QString var, list) {
int i = 0;
if(val.validate(var,i) == QValidator::Invalid)
return QValidator::Invalid;
}
return QValidator::Acceptable;
}
사용법 :
ui->lineEdit->setValidator(new Validator);
설명에 대해 : val.setLocale(QLocale(QLocale::German,QLocale::Germany));
당신은 당신이,184,859를 사용한다고 말했다이지만 .
및 ,
은 다른 국가에서 다른 소수점입니다. 그래서 나는 당신의 질문에 따라 예를 썼다. 독일어 로켈은 항상 .
이 정확한 위치라고 생각합니다.
그러나 로캘 별 소수점을 사용하고이 용도로 사용하는 것이 좋습니다. 코마 대신 구분 기호로 사용합니다.
실수가 있습니다. 따라서 시도해보십시오. 수정 (개선) :
QValidator::State Validator::validate(QString &input, int &pos) const
{
qDebug() << input<< pos;
QRegExpValidator reg(QRegExp("[0-9]+(\\.[0-9]+)?$"));
input.remove(" ");
if(input.contains(",,") || input.startsWith(","))
return QValidator::Invalid;
QStringList list = input.split(",");
qDebug()<< list;
bool isOk = true;
foreach (QString var, list) {
int i = 0;
if(reg.validate(var,i) == QValidator::Invalid)
return QValidator::Invalid;
if(reg.validate(var,i) == QValidator::Intermediate)
isOk = false;
}
if(isOk)
return QValidator::Acceptable;
else
return QValidator::Intermediate;
}
이 사이트에는 'QValidators'및 'QRegExp'와 관련하여 몇 가지 질문이 있습니다. [예를 들어 this (http://stackoverflow.com/questions/26777795/how-to-use-qlineedit-to-enter-integer-values/26778010#26778010). 특정 문제가 발생하면 검색하고, 읽고, 시도하고 다시 방문하십시오. – Bowdzone