2012-11-16 18 views

Antwort

88

QLineEdit::setValidator(), zum Beispiel:

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

oder

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

Siehe auch: QIntValidator, QDoubleValidator, QLineEdit::setValidator

+4

Kann dies vom Qt Designer aus geschehen, oder ist das nur über Code möglich? – sashoalm

+2

Nach meinem Wissen gibt es keine Möglichkeit, dies in Designer zu tun. – Chris

+0

Dies ist eine schnelle Lösung, wenn Sie Eingaben in wissenschaftlicher Notation benötigen (z. B. '3.14e-7'). 'QDoubleSpinBox' akzeptiert keine Zahlen in wissenschaftlicher Notation (Qt 5.5). –

16

Die beste QSpinBox ist.

Und für einen doppelten Wert verwenden Sie 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

Auch wenn das OP mit einem QLineEdit arbeiten möchte, ist die Verwendung einer QSpinBox definitiv der beste Ansatz. – DrHaze

+1

Dies funktioniert, wenn der Nummernbereich klein ist. Denken Sie darüber nach, dass Sie dieses Widget für Alter oder ID verwenden möchten. – Steve

+0

eine Möglichkeit, die Spinbox Tastatur-freundlicher zu machen, nur mit Zifferntasten, Dezimaltrennzeichen und Rücktaste zu arbeiten? – Micka

7

Sie könnten auch ein inputMask gesetzt:

QLineEdit.setInputMask("9") 

Dies ermöglicht dem Benutzer nur eine Ziffer 0-9 bis hin zu geben. Verwenden Sie mehrere 9, damit der Benutzer mehrere Zahlen eingeben kann. Siehe auch die komplette list of characters that can be used in an input mask.

(Meine Antwort ist in Python, aber es sollte nicht schwer sein, sie zu C verwandeln ++)

5

Warum Sie keine QSpinBox für diesen Zweck verwenden? Sie können die Auf-/Ab-Tasten unsichtbar mit der folgenden Zeile von Codes eingestellt:

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

Wenn Sie mit Qt Creator 5.6 Sie, dass wie dies tun können:

#include <QIntValidator> 

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

Ich empfehle Ihnen setzen, dass Zeile nach ui-> setupUi (this);

Ich hoffe, das hilft.

+4

Ihr Konstruktoraufruf sollte 'new QIntValidator (this)' sein, sonst wird das Validator-Objekt auslaufen, sobald Ihr Widget den Gültigkeitsbereich verlässt. – Alexandros

Verwandte Themen