C++ 强制QLineEdit成为双值的集合
考虑一下这个问题 我的工具中有一个QLineEdit,我应该组织如下支持。LineEdit的文本必须仅包含两个值,以my comas分隔。 F.e.6.2,8,9.0,55 我还必须验证,除了数字和COMA,用户不能输入任何其他字符。我还应该写一个方法,将这个文本转换成向量。 最初我想到了QRegExp和boost::spirit。但使用这些技术可能很困难C++ 强制QLineEdit成为双值的集合,c++,regex,qt,boost-spirit,qregexp,C++,Regex,Qt,Boost Spirit,Qregexp,考虑一下这个问题 我的工具中有一个QLineEdit,我应该组织如下支持。LineEdit的文本必须仅包含两个值,以my comas分隔。 F.e.6.2,8,9.0,55 我还必须验证,除了数字和COMA,用户不能输入任何其他字符。我还应该写一个方法,将这个文本转换成向量。 最初我想到了QRegExp和boost::spirit。但使用这些技术可能很困难 有什么想法吗?使用下一个自定义验证器 标题: #ifndef VALIDATOR_H #define VALIDATOR_H #inclu
有什么想法吗?使用下一个自定义验证器 标题:
#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
解释:val.setLocale(QLocale(QLocale::德语,QLocale::德语))代码>
您说过要使用6.2,…
但是
和,
在不同的国家是不同的小数点。所以我根据你们的问题写了一个例子。德国人总是认为
是正确的观点
但我建议您使用特定于语言环境的小数点并用于此目的;作为分离器而不是昏迷
有错误,所以试试这个。编辑(改进):
QValidator::State Validator::validate(QString&input,int&pos)常量
{
qDebug()关于QValidators
和QRegExp
,这个网站上有一些问题。如果你在使用它时遇到任何具体问题,请搜索、阅读、试用并返回。实际上,在这种情况下,你允许这样的事情。2.2.2.2.2,此外,我可以找到一个解决办法来创建这个,5,5。这是不正确的。@EduardRostomyan I认为我修复了这个错误,请检查我的编辑,我重写了整个validate()
#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);
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;
}