2012-11-16 18 views

Odpowiedz

88

QLineEdit::setValidator(), na przykład:

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

lub

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

Patrz: QIntValidator, QDoubleValidator, QLineEdit::setValidator

+4

Czy można to zrobić z Qt Designer, czy jest to możliwe tylko za pomocą kodu? – sashoalm

+2

Według mojej wiedzy nie ma sposobu, aby to zrobić w projektancie. – Chris

+0

To jest szybkie rozwiązanie, jeśli potrzebujesz danych wejściowych podanych w notacji naukowej (np. '3.14e-7'). 'QDoubleSpinBox' nie przyjmuje liczb w notacji naukowej (Qt 5.5). –

16

Najlepiej QSpinBox.

I dla podwójnej wartości użyj 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))); 
+1

Nawet jeśli OP chce pracować z QLineEdit, używanie QSpinBox jest zdecydowanie najlepszym rozwiązaniem. – DrHaze

+1

Działa to, gdy zakres numerów jest mały. Pomyśl o tym, że możesz użyć tego widżetu dla wieków lub identyfikatora. – Steve

+0

jakikolwiek sposób, aby spinbox był bardziej przyjazny dla klawiatury do pracy tylko z kluczami numerycznymi, separatorem dziesiętnym i backspace? – Micka

7

Można również ustawić inputMask:

QLineEdit.setInputMask("9") 

To pozwala użytkownikowi wpisać tylko jedną cyfrę w przedziale od 0 do 9. Użyj wielu numerów 9, aby umożliwić użytkownikowi wprowadzanie wielu numerów. Zobacz także kompletny list of characters that can be used in an input mask.

(Moja odpowiedź jest w Pythonie, ale to nie powinno być trudne, aby przekształcić go do C++)

5

Dlaczego nie używasz QSpinBox na ten cel? Można ustawić górę/w dół niewidoczne z poniższej linii kodów:

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

Jeśli używasz Qt Creator 5.6 można to zrobić tak:

#include <QIntValidator> 

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

Polecam umieścić że linia po ui> setupUi (this);

Mam nadzieję, że to pomoże.

+4

Wywołanie konstruktora powinno być 'nowe QIntValidator (this)', w przeciwnym razie obiekt walidatora wycieknie, gdy tylko widget zniknie z zakresu. – Alexandros