Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. QLineEdit et son Validator : problème d'apparance du texte suite à setText().
Forum Updated to NodeBB v4.3 + New Features

QLineEdit et son Validator : problème d'apparance du texte suite à setText().

Scheduled Pinned Locked Moved Solved French
14 Posts 5 Posters 2.4k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Max
    wrote on last edited by
    #5

    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.

    1 Reply Last reply
    0
    • F Offline
      F Offline
      Frederic
      wrote on last edited by
      #6

      Bonjour Max,
      Nous allons nous pencher sur ce probleme et tenter de vous revenir avec une solution/patch rapidement. Je créerai en paralelle un bug report afin que vous puissez suivre nos avancements.

      1 Reply Last reply
      0
      • M Offline
        M Offline
        Max
        wrote on last edited by
        #7

        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...

        1 Reply Last reply
        0
        • F Offline
          F Offline
          Frederic
          wrote on last edited by
          #8

          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.

          https://bugreports.qt.io/browse/QTBUG-130618

          JonBJ 1 Reply Last reply
          0
          • F Frederic

            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.

            https://bugreports.qt.io/browse/QTBUG-130618

            JonBJ Online
            JonBJ Online
            JonB
            wrote on last edited by JonB
            #9

            @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 fait setText("INVALID") est problématique/pas convivial.

            https://bugreports.qt.io/browse/QTBUG-130618

            • 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/ ?).
            1 Reply Last reply
            0
            • F Offline
              F Offline
              Frederic
              wrote on last edited by
              #10

              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.

              SGaistS 1 Reply Last reply
              0
              • F Frederic

                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.

                SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #11

                @Frederic En pratique, non. La propriété text est très claire sur ce sujet: The text is not validated when inserted with setText()..

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  Max
                  wrote on last edited by
                  #12

                  Il est des moments où il faut être honnête...

                  @SGaist a raison, QLineEdit::setText() ne met pas le texte en rouge quand il n'est pas conforme au validator.
                  L'erreur venait de moi et c'est arrangé.
                  Sincèrement désolé !

                  SGaistS 1 Reply Last reply
                  0
                  • M Max

                    Il est des moments où il faut être honnête...

                    @SGaist a raison, QLineEdit::setText() ne met pas le texte en rouge quand il n'est pas conforme au validator.
                    L'erreur venait de moi et c'est arrangé.
                    Sincèrement désolé !

                    SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #13

                    @Max pas de soucis ! C'est comme ça qu'on apprend :-)

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      Max
                      wrote on last edited by
                      #14

                      Pour être un peu plus complet sur ce sujet, je viens de lire que la QLineEdit peut être déclarée mandatory dans ses propriétés. Auquel cas le fond de ce Widget est jaune s'il n'est pas renseigné.

                      1 Reply Last reply
                      0
                      • M Max has marked this topic as solved on

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved