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.8k 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Bonsoir,

    Quelle version de Qt est utilisée ?
    Sur quel OS ?

    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
      #3

      Je suis sous Linux Debian 12, Qt 6.4.2.

      1 Reply Last reply
      0
      • Axel SpoerlA Offline
        Axel SpoerlA Offline
        Axel Spoerl
        Moderators
        wrote on last edited by
        #4

        Bonjour,
        Pour réduire le problème, peux-tu connecter un slot ou un lambda à ui->lineEdit ? Est-il émis après que le texte ait été corrigé manuellement, mais qu'il soit encore rouge ?
        Que se passe-t-il si la même chaîne de caractères est envoyée à

        int pos = 0;
        constexpr QLatin1StringView before("chaineEditeeManuellement");
        QString after = before; 
        const auto state = nom_val->validate(after, pos);
        qDebug() << before << after << state << pos;
        

        Software Engineer
        The Qt Company, Oslo

        1 Reply Last reply
        0
        • 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 Offline
                  JonBJ Offline
                  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