2014-11-27 7 views
0

이 문제를 고려하십시오.QLineEdit을 이중 값의 집합으로 설정하십시오.

내 도구에 QLineEdit이 있는데 다음과 같이 지원을 구성해야합니다. LineEdit의 텍스트는 내 혼수 상태를 구분하는 이중 값만 포함해야합니다. F.e. 6.2, 8, 9.0, 55 나는 그 사용자가 다른 문자가 아닌 숫자와 혼수 상태를 입력 할 수 있는지 확인해야한다. 또한이 텍스트를 벡터로 변환하는 메서드를 작성해야합니다. 처음에는 QRegExp와 boost :: spirit에 대해 생각했습니다. 그러나 이러한 기법을 사용하면 어려울 수 있습니다.

아이디어가 있으십니까?

+0

이 사이트에는 'QValidators'및 'QRegExp'와 관련하여 몇 가지 질문이 있습니다. [예를 들어 this (http://stackoverflow.com/questions/26777795/how-to-use-qlineedit-to-enter-integer-values/26778010#26778010). 특정 문제가 발생하면 검색하고, 읽고, 시도하고 다시 방문하십시오. – Bowdzone

답변

1

다음 사용자 정의 검사기를 사용하십시오.

헤더 :

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

사실,이 경우에는 그러한 것을 허용합니다. 2.2.2.2.2 그리고 더 나아가 5, 5를 만들 수있는 workaround를 찾을 수 있습니다. 올바르지 않습니다. –

+0

@EduardRostomyan이 오류를 수정하고 편집을 확인하십시오. 전체 유효성 검사()를 다시 작성했습니다. – Chernobyl

관련 문제