숫자 만 허용하도록 QLineEdit 설정


85

나는이 QLineEdit경우 사용자가 입력해야 숫자 만.

숫자 전용 설정이 QLineEdit있습니까?

답변:


136

QLineEdit::setValidator()예 :

myLineEdit->setValidator( new QIntValidator(0, 100, this) );

또는

myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );

참조 : QIntValidator , QDoubleValidator , QLineEdit :: setValidator


4
Qt Designer에서 수행 할 수 있습니까? 아니면 코드를 통해서만 가능합니까?
sashoalm 2014 년

2
내 지식으로는 디자이너에서 이것을 할 방법이 없습니다.
Chris

과학적 표기법 (예 :)으로 입력해야하는 경우 빠른 솔루션 3.14e-7입니다. QDoubleSpinBox과학적 표기법 (Qt 5.5)의 숫자를 허용하지 않습니다.
Frederik Aalund

(1,100)을 입력하면 여전히 0을 입력으로 받아들입니다. 게다가 나는 0을 무기한으로 쓸 수있다 (단지 세 번이 아니라) !!
McLan

2
참조 QRegExpValidator이 QRegExp로 ( "[0-9] *").
user2962533

29

최고는 QSpinBox입니다.

그리고 이중 값을 사용하려면 QDoubleSpinBox.

QSpinBox myInt;
myInt.setMinimum(-5);
myInt.setMaximum(5);
myInt.setSingleStep(1);// Will increment the current value with 1 (if you use up arrow key) (if you use down arrow key => -1)
myInt.setValue(2);// Default/begining value
myInt.value();// Get the current value
//connect(&myInt, SIGNAL(valueChanged(int)), this, SLOT(myValueChanged(int)));

2
OP가 QLineEdit로 작업하기를 원하더라도 QSpinBox를 사용하는 것이 가장 좋은 방법입니다.
DrHaze

2
이것은 숫자 범위가 작을 때 작동합니다. 연령이나 ID에이 위젯을 사용하고 싶을 수도 있습니다.
Steve

숫자 키, 소수점 구분 기호 및 백 스페이스로만 작동하도록 스핀 상자를 키보드 친화적으로 만드는 방법이 있습니까?
Micka

13

정규식 검사기

지금까지 다른 답변은 상대적으로 유한 한 자릿수에 대한 솔루션을 제공합니다 . 그러나 임의의 또는 가변적 인 자릿수에 관심이있는 경우 숫자 QRegExpValidator만 허용하는 정규식을 전달하는을 사용할 수 있습니다 ( user2962533의 주석에서 언급 한대로 ). 다음은 최소한의 완전한 예입니다.

#include <QApplication>
#include <QLineEdit>
#include <QRegExpValidator>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QLineEdit le;
    le.setValidator(new QRegExpValidator(QRegExp("[0-9]*"), &le));
    le.show();

    return app.exec();
}

QRegExpValidator그 장점을 가지고 (그에만 약하게이다). 다른 유용한 유효성 검사가 가능합니다.

QRegExp("[1-9][0-9]*")    //  leading digit must be 1 to 9 (prevents leading zeroes).
QRegExp("\\d*")           //  allows matching for unicode digits (e.g. for 
                          //    Arabic-Indic numerals such as ٤٥٦).
QRegExp("[0-9]+")         //  input must have at least 1 digit.
QRegExp("[0-9]{8,32}")    //  input must be between 8 to 32 digits (e.g. for some basic
                          //    password/special-code checks).
QRegExp("[0-1]{,4}")      //  matches at most four 0s and 1s.
QRegExp("0x[0-9a-fA-F]")  //  matches a hexadecimal number with one hex digit.
QRegExp("[0-9]{13}")      //  matches exactly 13 digits (e.g. perhaps for ISBN?).
QRegExp("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}")
                          //  matches a format similar to an ip address.
                          //    N.B. invalid addresses can still be entered: "999.999.999.999".     

더 많은 온라인 편집 동작

문서 에 따르면 :

라인 편집에 유효성 검사기가 설정되어 있으면 유효성 검사기가 QValidator :: Acceptable을 반환하는 경우에만 returnPressed () / editingFinished () 신호가 방출됩니다.

따라서 라인 편집을 통해 사용자는 최소 금액에 도달하지 않았더라도 숫자를 입력 할 수 있습니다. 예를 들어 사용자가 정규식 "[0-9]{3,}"(최소 3 자리 필요)에 대해 텍스트를 입력하지 않은 경우에도 줄 편집을 통해 사용자 는 최소 요구 사항 에 도달 하기 위해 입력을 입력 할 수 있습니다 . 그러나 사용자가 "최소 3 자리"요구 사항을 충족하지 않고 편집을 마치면 입력이 유효하지 않습니다 . 신호 returnPressed()및이 editingFinished()방출되지 않는다.

정규식에 최대 제한 (예 :)이있는 경우 "[0-1]{,4}"라인 편집은 4자를 초과하는 모든 입력을 중지합니다. 또한, 문자 집합 (예를 위해 [0-9], [0-1], [0-9A-F], 등) 라인 편집 만의 문자 수 있습니다 특정 세트를 입력 할 수 있습니다.

다른 Qt 버전이나 운영 체제가 아닌 macOS의 Qt 5.11에서만 이것을 테스트했습니다. 그러나 Qt의 크로스 플랫폼 스키마가 주어지면 ...

데모 : Regex Validators Showcase



7

QSpinBox이 목적으로 a 를 사용하지 않는 이유는 무엇 입니까? 다음 코드 줄에서 보이지 않는 위 / 아래 버튼을 설정할 수 있습니다.

// ...
QSpinBox* spinBox = new QSpinBox( this );
spinBox->setButtonSymbols( QAbstractSpinBox::NoButtons ); // After this it looks just like a QLineEdit.
//...

-1

QT Creator 5.6을 사용하는 경우 다음과 같이 할 수 있습니다.

#include <QIntValidator>

ui->myLineEditName->setValidator( new QIntValidator);

ui-> setupUi (this); 다음에 그 줄을 넣는 것이 좋습니다.

이게 도움이 되길 바란다.


8
생성자 호출은이어야합니다 new QIntValidator(this). 그렇지 않으면 위젯이 범위를 벗어나는 즉시 유효성 검사기 객체가 누출됩니다.
Alexandros
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.