2012-11-16 10 views

risposta

88

QLineEdit::setValidator(), ad esempio:

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

o

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

See: QIntValidator, QDoubleValidator, QLineEdit::setValidator

+4

Questa operazione può essere eseguita da Qt Designer oppure è possibile solo tramite il codice? – sashoalm

+2

Per quanto ne so, non c'è modo di farlo nel designer. – Chris

+0

Questa è una soluzione rapida se è necessario un input fornito in notazione scientifica (ad es., '3.14e-7'). 'QDoubleSpinBox' non accetta numeri in notazione scientifica (Qt 5.5). –

16

Il migliore è QSpinBox.

E per un valore doppio utilizzare 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

Anche se l'OP vuole lavorare con un QLineEdit, l'utilizzo di un QSpinBox è sicuramente l'approccio migliore. – DrHaze

+1

Funziona quando l'intervallo di numeri è piccolo. Pensa che potresti voler utilizzare questo widget per età o id. – Steve

+0

un modo per rendere la casella di selezione più facile da usare con le chiavi numeriche, separatore decimale e backspace? – Micka

7

si potrebbe anche impostare un inputMask:

QLineEdit.setInputMask("9") 

Questo permette all'utente di digitare solo una cifra che varia 0-9. Utilizzare più 9 per consentire all'utente di inserire più numeri. Vedi anche il completo list of characters that can be used in an input mask.

(La mia risposta è in Python, ma non dovrebbe essere difficile da trasformarlo in C++)

5

Perché non utilizzare un QSpinBox per questo scopo? È possibile impostare i tasti su/giù invisibili con la seguente riga di codice:

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

Se stai usando Qt Creator 5.6 si può fare in questo modo:

#include <QIntValidator> 

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

raccomando metti che riga dopo ui-> setupUi (questo);

Spero che questo aiuti.

+4

L'invocazione del costruttore deve essere 'new QIntValidator (this)', altrimenti l'oggetto validatore verrà perso non appena il widget diventa fuori portata. – Alexandros