Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 强制QLineEdit成为双值的集合_C++_Regex_Qt_Boost Spirit_Qregexp - Fatal编程技术网

C++ 强制QLineEdit成为双值的集合

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

考虑一下这个问题

我的工具中有一个QLineEdit,我应该组织如下支持。LineEdit的文本必须仅包含两个值,以my comas分隔。 F.e.6.2,8,9.0,55 我还必须验证,除了数字和COMA,用户不能输入任何其他字符。我还应该写一个方法,将这个文本转换成向量。 最初我想到了QRegExp和boost::spirit。但使用这些技术可能很困难


有什么想法吗?

使用下一个自定义验证器

标题:

#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;
}