2014-10-30 3 views
1

QLineEditQDoubleValidator을 사용하고 있습니다. 응용 프로그램 로캘 (QtCreator에서 설정)은 QLocale::German입니다.QDoubleValidator는 여러 개의 소수점을 허용합니다.

이제 소수점 구분 기호로 도트 또는 쉼표를 사용하여 유효한 double을 입력하면 textedit에 쓰거나 문자열을 float로 변환해도 문제가 없습니다. 하지만 유효성 검사기를 사용하면 여러 개의 소수 구분 기호로 항목을 작성할 수 있습니다. 123.567,890 또는 ,,03.4...과 같은 문자열은 유효성이 검사되지만 float로 변환 할 수 없습니다.

QDoubleValidator실제 숫자 만 유효성을 검사하고 알파벳 문자가없는 문자열이 아니라고 말할 수있는 방법이 있습니까?

기본적으로 기본 유효 로케일 또는 독일어 로켈을 사용하여 부동 소수점으로 변환 될 수있는 문자열의 유효성 만 검사하는 유효성 검사기가 필요합니다.

+1

왜 ['QDoubleSpinBox'] (http://doc.qt.io/qt-5/qdoublespinbox.html)를 사용하지 않습니까? 자동으로 시스템 로케일을 사용하며, 보지 않으려면 [위/아래 버튼 숨기기] (http://doc.qt.io/qt-5/qabstractspinbox.html#buttonSymbols-prop)를 사용할 수 있습니다 그들. –

답변

2

나는 지금까지 QDoubleValidator를 사용하지 않은하지만 난 사용하여 같은 동작을 얻을 수있는 QRegExpValidator :

QRegExpValidator* rxv = new QRegExpValidator(QRegExp("[+-]?\\d*[\\.,]?\\d+"), this); 
lineedit->setValidator(rxv); 
+0

작동하지 않습니다 : 이미 라인 편집기에 텍스트가있는 경우 원하는대로 입력 할 수 있습니다. lineedit이 비어 있으면 아무것도 입력 할 수 없습니다. :/ – Uroc327

+0

'\\ d \\ [.,]?'대신'\\ d [\\.,]?'를 의미할까요? – Uroc327

+0

물론 통고 주셔서 감사합니다. 나는 – Bowdzone

1

당신이 플로트로 콘텐츠를 변환만을 원하고 당신이 로케일 사양을 원하지 않는 경우 QRegExpValidator을 다음 깊은 regexp과 함께 사용할 수 있습니다.

ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?"))); 
+0

나의 해결책을 편집한다 : QRegExpValidator * validate = 새로운 QRegExpValidator (QRegExp ("[0-9] * ([\\.,]? [0-9] {0,2})?")); – blackmoon

관련 문제