Используйте следующий пользовательский валидатор.
Заголовок:
#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));
Вы сказали, что вы хотите использовать 6.2,...
, но .
и ,
отличается от десятичной точки в разных странах. Поэтому я написал пример в соответствии с вашим вопросом. Немецкий язык всегда считает, что .
- правильная точка.
Но я рекомендую вам использовать десятичную точку, специфичную для локали, и использовать ее для этого Назначения; как разделитель вместо комы.
Ошибки, поэтому попробуйте это. Редактировать (улучшить):
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'. [Например, это] (http://stackoverflow.com/questions/26777795/how-to-use-qlineedit-to-enter-integer-values/26778010#26778010). Пожалуйста, найдите, прочитайте, попробуйте и вернитесь, если у вас возникнут какие-либо конкретные проблемы. – Bowdzone