QLineEdit et son Validator : problème d'apparance du texte suite à setText().
-
Bonjour Axel,
J'ai bien connecté un slot à ui->lineEdit sur le signal textChanged() et il est bien appelé.
Quant au test que tu propose le validator ne modifie pas la chaîne proposée.
L'expression régulière utilisée (un peu bourin je l'avoue) n'accepte que les caractère alphanumériques accentués ou non, les espaces, les tirets, et une particularité concernant l'abréviation "ép." :
"^(\w| |'|-|–|À|Á|Â|Ã|Ä|Å|Ç|È|É|Ê|Ë|Ì|Í|Î|Ï|Ò|Ó|Ô|Õ|Ö|Ù|Ú|Û|Ü|Ý|à|á|â|ã|ä|å|ç|è|é|ê|ë|ì|í|î|ï|ð|ò|ó|ô|õ|ö|ù|ú|û|ü|ý|ÿ|œ|Œ|æ|Æ|ép\.)+$"
Les chaînes correctes apparaissent bien en noir dans le QLineEdit.Avec ton test, j'ai tenté des chaînes incorrectes qui n'ont pas été modifiées par validate() :
"Acr{0branche" "Acr{0branche" QValidator::Invalid 12
"Acr{branche" "Acr{branche" QValidator::Invalid 11
"Acr1branche" "Acr1branche" QValidator::Acceptable 0
En écrivant ces lignes je m'aperçois toutefois que le dernier test ne devrait pas passer... mais cela n'a pas de lien avec le problème. -
Bonjour Frédéric,
Je viens de constater ce week-end que le problème ne se pose pas avec un autre QLineEdit doté d'un validateur utilisant cette expression régulière (validation d'une date au format dd/MM/yyyy):
"^(((0[1-9]|[12][0-9]|3[01])- /.|(0[1-9]|[12][0-9]|30)- /.|(0[1-9]|1\d|2[0-8])[- /.]02)[- /.]\d{4}|29[- /.]02- /.)$"
Quand la chaîne tapée est bonne le texte passe du rouge au noir.
Je creuse... -
Après un peu de recherche il semble que le texte inséré par setText() n'est pas validé. Voir la documentation pour QLineEdit https://doc.qt.io/qt-6/qlineedit.html#text-prop
De mon coté, j'ai effectué le meme exercise sur windows 11. SetText() permet effectivement d'insérer du text "incorrect" et il est par la suite possible de continuer a en entrer sans soucis. Cependant, si l'on supprime ce qui est dans le lineEdit en question, il devient de nouveau necessaire de respecter le validator. Celui-ci demeure donc actif.
-
@Frederic said in QLineEdit et son Validator : problème d'apparance du texte suite à setText().:
SetText() permet effectivement d'insérer du text "incorrect" et il est par la suite possible de continuer a en entrer sans soucis. Cependant, si l'on supprime ce qui est dans le lineEdit en question, il devient de nouveau necessaire de respecter le validator.
lineEdit->setValidator(...); .... auto v = lineEdit->validator(); lineEdit->setValidator(nullptr); lineEdit->setText("INVALID"); lineEdit->setValidator(v);
Maintenant on ne peut plus "continuer a en entrer sans soucis". Mais l'utilisateur doit taper Ctrl+A et Delete/Backspace pour continuer.
QLineEdit
+QValidator
fonctionne par empêcher l'utilisateur de saisir une entrée invalide en premier lieu. Donc continuer apres avoir faitsetText("INVALID")
est problématique/pas convivial.- Je crois qu'il faut ecrire un exemple de code?
- "When entering a "correct" text after an "incorrect" one, the QLineEdit remains red." Je ne trouve pas que
QLineEdit
montre "incorrect" texte en aucun couleur/rouge? (à moins que vous faites quelque chose comme https://snorfalorpagus.net/blog/2014/08/09/validating-user-input-in-pyqt4-using-qvalidator/ ?).
-
Idéalement, il faudrait deposer un reproducteur simple dans le rapport de bug (incluant le repaint en rouge lors de l'entrée de texte incorrect).
En théorie, setText() devrait toujours entrer un texte qui serait validé par le validator. L'objectif était plutot de décrire le comportement de lineEdit.
-
@Frederic En pratique, non. La propriété text est très claire sur ce sujet:
The text is not validated when inserted with setText().
. -