J'ai un QLineEdit
où l'utilisateur ne doit saisir que des chiffres.
Alors, existe-t-il un paramètre uniquement numérique pour QLineEdit
?
J'ai un QLineEdit
où l'utilisateur ne doit saisir que des chiffres.
Alors, existe-t-il un paramètre uniquement numérique pour QLineEdit
?
QLineEdit::setValidator()
par exemple :
myLineEdit->setValidator( new QIntValidator(0, 100, this) );
ou
myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );
Voir : QIntValidateur , QDoubleValidator , QLineEdit::setValidator
Le meilleur est QSpinBox
.
Et pour une valeur double, utilisez 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)));
Le validateur Regex
Jusqu'à présent, les autres réponses n'ont fourni des solutions que pour un nombre relativement limité de cas. finie le nombre de chiffres. Toutefois, si vous êtes concerné par un arbitraire ou un variable nombre de chiffres, vous pouvez utiliser un QRegExpValidator
en passant une regex qui n'accepte que les chiffres (comme indiqué par Commentaire de user2962533 ). Voici un exemple minimal et complet :
#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();
}
Le site QRegExpValidator
a ses mérites (et ce n'est qu'un euphémisme). Il permet un tas d'autres validations utiles :
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".
Plus sur le comportement de l'édition en ligne
Selon documentation :
Notez que si un validateur est défini pour l'édition de la ligne, les signaux returnPressed()/editingFinished() ne seront émis que si le validateur renvoie QValidator::Acceptable.
Ainsi, l'édition de la ligne permettra à l'utilisateur de saisir des chiffres même si le montant minimum n'a pas encore été atteint. Par exemple, même si l'utilisateur n'a pas saisi de texte par rapport à la regex "[0-9]{3,}"
(qui nécessite au moins 3 chiffres), l'édition de ligne permet toujours à l'utilisateur de saisir des données à atteindre cette exigence minimale. Toutefois, si l'utilisateur termine l'édition sans satisfaire à l'exigence "au moins 3 chiffres", l'entrée sera la suivante invalide ; les signaux returnPressed()
y editingFinished()
ne sera pas émise.
Si la regex avait une limite maximale (par ex. "[0-1]{,4}"
), alors l'édition de ligne arrêtera toute saisie au-delà de 4 caractères. De plus, pour les jeux de caractères (i.e. [0-9]
, [0-1]
, [0-9A-F]
etc.), l'édition de ligne n'autorise que les caractères de l'option cet ensemble particulier à saisir.
Notez que je n'ai testé ceci qu'avec Qt 5.11 sur un macOS, pas sur d'autres versions de Qt ou systèmes d'exploitation. Mais étant donné le schéma multiplateforme de Qt...
Démonstration : <a href="https://github.com/TrebledJ/Qt-Examples/tree/master/%5Bwidgets%5D--regex-validators" rel="noreferrer">Vitrine des validateurs Regex</a>
Vous pouvez également définir un inputMask
:
QLineEdit.setInputMask("9")
Cela permet à l'utilisateur de ne taper qu'un seul chiffre compris entre 0 et 10. 0
à 9
. Utilisez plusieurs 9
pour permettre à l'utilisateur de saisir plusieurs chiffres. Voir également la version complète de liste des caractères pouvant être utilisés dans un masque de saisie .
(Ma réponse est en Python, mais il ne devrait pas être difficile de la transformer en C++)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.