IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

QDoubleValidator : signaler un nombre non valide


Sujet :

Qt

  1. #1
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut QDoubleValidator : signaler un nombre non valide
    Bonjour,

    alors je veux avoir une validation de ce qui est entré dans une QLineEdit. Pour ce faire, comme je veux contrôler des « double », j'ai utilisé la classe QDoubleValidator.
    Donc dans un premier temps, j'étais relativement content puisque je ne pouvais effectivement que taper des nombres flottants avec un certain nombre de décimales... MAIS maintenant j'aimerais pouvoir lorsque j'appuie sur « Entrée » depuis ma QLineEdit générer genre une popup pour stipuler que le nombre n'est pas dans les bornes du QDoubleValidator et donc indiquer les bornes valides. Le soucis c'est que bien entendu si nous sommes en dehors des bornes, le signal n'est pas émit donc je rentre dans la fonction liée au signal returnPressed() de QLineEdit uniquement si le nombre est valide (dans le sens dans les bornes).

    Donc je voulais savoir qu'elle était la meilleure méthode pour avoir une QDoubleValidator qui permet d'avoir ce comportement, c'est à dire avoir une indication lorsque cela est invalide... Est-ce que, je dis ça en réfléchissant et en écrivant, faire une classe qui étend QDoubleValidator et ré-implémenter la méthode validate() serait l'astuce ?!

    Si vous avez un exemple ou une idée qui traîne, je suis preneur. En attendant, je vais continuer à faire des tests en étendant par exemple QDoubleValidator.

    Merci d'avance.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pourquoi vouloir réimplémenter la méthode validate() ? Elle semble faire ce qu'elle doit faire. Il suffirait de l'appeler sur le returnPressed() pour vérifier la valeur et affiché une popup.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Bonjour, je pensais la même chose, mais visiblement returnPressed() n'est appelée que si la valeur est au moins acceptable

    " the returnPressed() signal will only be emitted if the input follows the inputMask() and the validator() returns QValidator::Acceptable."
    source: http://doc.qt.io/qt-5/qlineedit.html#returnPressed


    Une autre possibilité serait de detecté la touche "RETURN" depuis la fenêtre parent du QLineEdit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void keyPressEvent(QKeyEvent *e)
        {
            if ( (e->key()==Qt::Key_Enter) || (e->key()==Qt::Key_Return) ) {
                //Enter or return was pressed
                //Tester si la valeur double est acceptable
                e->accept();
            } 
            QWidget::keyPressEvent(e);
        }
    Je ne suis pas sûre que l'appel à e->accept(); soit nécessaire dans ce cas. Je ne sais pas si cela empêche la propagation de l'événement au widgets enfants.

    Sinon, ne serait-il pas plus simple d'utiliser un QDoubleSpinBox ?

  4. #4
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    Alors comme mon application me donne pas trop le choix que de passer par la branche QGraphicsView/QgraphicsScene et que l'utilisation des QGraphicsProxyWidget n'est pas forcement la meilleure solution (c'est à dire garder soit QLineEdit ou comme proposé une QDoubleSpinBox), j'ai donc fait une classe qui hérite de QGraphicsTextItem en modifiant pas mal de comportement.

    Bien évidemment une QGraphicsTextItem ne supporte pas de base un QValidator donc je vais devoir certainement faire un système au niveau de la méthode keyPressEvent pour bloquer les lettres pour ne garder que les chiffres lors de la saisie, ainsi qu'un Validator maison pour valider la saisie lors de la pression de la touche Key_Return et Key_Enter.

    Si vous avez des remarques sur ce que je viens de proposer, n'hésitez surtout pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ORA-01722: Nombre non valide + sqlloader
    Par damiano84 dans le forum SQL*Loader
    Réponses: 9
    Dernier message: 20/05/2022, 20h09
  2. ORA-01722: Nombre non valide
    Par misa dans le forum Oracle
    Réponses: 4
    Dernier message: 18/12/2007, 15h23
  3. Oracle - Nombre non valide
    Par pado_83 dans le forum JDBC
    Réponses: 2
    Dernier message: 28/09/2006, 15h11
  4. [SQLLDR]ORA-01722: Nombre non valide
    Par syl2095 dans le forum Oracle
    Réponses: 5
    Dernier message: 22/05/2006, 15h42
  5. Réponses: 7
    Dernier message: 07/03/2006, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo