Ich habe eine, QLineEdit
wo der Benutzer nur Zahlen eingeben sollte.
Gibt es also eine Nur-Zahlen-Einstellung für QLineEdit
?
QLineEdit::setValidator()
, zum Beispiel:
myLineEdit->setValidator( new QIntValidator(0, 100, this) );
oder
myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );
Siehe: QIntValidator , QDoubleValidator , QLineEdit :: setValidator
3.14e-7
. B. ).QDoubleSpinBox
akzeptiert keine Zahlen in wissenschaftlicher Notation (Qt 5.5).Das Beste ist
QSpinBox
.Und für einen doppelten Wert verwenden
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)));
quelle
Der Regex-Validator
Bisher bieten die anderen Antworten Lösungen für nur eine relativ begrenzte Anzahl von Ziffern. Wenn Sie sich jedoch mit einer beliebigen oder variablen Anzahl von Ziffern befassen , können Sie a verwenden
QRegExpValidator
und einen regulären Ausdruck übergeben , der nur Ziffern akzeptiert (wie im Kommentar von user2962533 angegeben ). Hier ist ein minimales, vollständiges Beispiel:#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(); }
Das
QRegExpValidator
hat seine Vorzüge (und das ist nur eine Untertreibung). Es ermöglicht eine Reihe weiterer nützlicher Validierungen: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".
Weitere Informationen zum Online-Bearbeitungsverhalten
Laut Dokumentation :
Somit ermöglicht die Zeilenbearbeitung dem Benutzer die Eingabe von Ziffern, selbst wenn der Mindestbetrag noch nicht erreicht wurde. Selbst wenn der Benutzer keinen Text für den regulären Ausdruck eingegeben hat
"[0-9]{3,}"
(für den mindestens 3 Ziffern erforderlich sind), kann der Benutzer bei der Zeilenbearbeitung dennoch Eingaben eingeben, um diese Mindestanforderung zu erreichen . Wenn der Benutzer die Bearbeitung jedoch beendet, ohne die Anforderung von "mindestens 3 Ziffern" zu erfüllen, ist die Eingabe ungültig . die SignalereturnPressed()
undeditingFinished()
werden nicht ausgegeben.Wenn der reguläre Ausdruck eine maximale Grenze hatte (z. B.
"[0-1]{,4}"
), stoppt die Zeilenbearbeitung jede Eingabe nach 4 Zeichen. Zusätzlich wird für Zeichensätze (dh[0-9]
,[0-1]
,[0-9A-F]
usw.) die Line-Bearbeitung erlaubt nur Zeichen von diesem bestimmten Satz eingegeben werden.Beachten Sie, dass ich dies nur mit Qt 5.11 unter einem MacOS getestet habe, nicht mit anderen Qt-Versionen oder Betriebssystemen. Aber angesichts des plattformübergreifenden Schemas von Qt ...
Demo: Regex Validators Showcase
quelle
Sie können auch Folgendes festlegen
inputMask
:QLineEdit.setInputMask("9")
Dadurch kann der Benutzer nur eine Ziffer von
0
bis eingeben9
. Verwenden Sie mehrere9
, damit der Benutzer mehrere Zahlen eingeben kann. Siehe auch die vollständige Liste der Zeichen, die in einer Eingabemaske verwendet werden können .(Meine Antwort ist in Python, aber es sollte nicht schwer sein, es in C ++ umzuwandeln.)
quelle
Warum benutzt du nicht ein
QSpinBox
für diesen Zweck? Sie können die Auf- / Ab-Tasten mit der folgenden Codezeile unsichtbar machen:// ... QSpinBox* spinBox = new QSpinBox( this ); spinBox->setButtonSymbols( QAbstractSpinBox::NoButtons ); // After this it looks just like a QLineEdit. //...
quelle
Wenn Sie QT Creator 5.6 verwenden, können Sie dies folgendermaßen tun:
#include <QIntValidator> ui->myLineEditName->setValidator( new QIntValidator);
Ich empfehle Ihnen, diese Zeile nach ui-> setupUi (this) zu setzen.
Ich hoffe das hilft.
quelle
new QIntValidator(this)
, da sonst das Validator-Objekt ausläuft, sobald Ihr Widget den Gültigkeitsbereich verlässt.