Mam QLineEdit
, gdzie użytkownik powinien wprowadzić tylko liczby.Ustaw QLineEdit, aby akceptować tylko numery
Czy istnieje ustawienie liczbowe dla QLineEdit
?
Mam QLineEdit
, gdzie użytkownik powinien wprowadzić tylko liczby.Ustaw QLineEdit, aby akceptować tylko numery
Czy istnieje ustawienie liczbowe dla QLineEdit
?
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
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)));
Nawet jeśli OP chce pracować z QLineEdit, używanie QSpinBox jest zdecydowanie najlepszym rozwiązaniem. – DrHaze
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
jakikolwiek sposób, aby spinbox był bardziej przyjazny dla klawiatury do pracy tylko z kluczami numerycznymi, separatorem dziesiętnym i backspace? – Micka
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++)
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.
//...
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.
Wywołanie konstruktora powinno być 'nowe QIntValidator (this)', w przeciwnym razie obiekt walidatora wycieknie, gdy tylko widget zniknie z zakresu. – Alexandros
Czy można to zrobić z Qt Designer, czy jest to możliwe tylko za pomocą kodu? – sashoalm
Według mojej wiedzy nie ma sposobu, aby to zrobić w projektancie. – Chris
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). –