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 :

QDoubleSpinBox : système de validation


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 : 662
    Points
    662
    Par défaut QDoubleSpinBox : système de validation
    Bonjour tout le monde,

    je voulais savoir si il y avait un moyen de court circuiter la validation d'un QDoubleSpinBox. Je m'explique :

    j'ai donc un QDoubleSpinBox qui possède un Min/Max ; prenons un exemple simple si min = 10 et max = 100, si je tape 99, je pourrais physiquement pas taper un troisième 9 car c'est au delà de max par contre si je tape uniquement 9, je suis dans un cas donc "invalide" qui va selon la configuration du SpinBox être à la perte du focus mis à 10 ou à la dernière valeur tapée. Le comportement lorsqu'on tente de dépasser le max, c'est à dire empêcher de littéralement taper le nombre me convient mais la correction dans le cas d'une valeur inférieure à la valeur Min me dérange.

    Ce que j'aimerais c'est savoir quand c'est "invalide" et ne pas avoir la correction automatique dans le cas du Min (ou dans tous les cas peut importe...). J'ai déjà tenté de surcharger les méthodes fixup et validate mais il continue malgré tout de me corriger automatiquement ma valeur.

    Peut être n'y a t'il aucun moyen simple et que je dois me tourner vers un QLineEdit par exemple avec un QValidator personnalisé ?!

    J'attends vos remarques, merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 631
    Points : 30 704
    Points
    30 704
    Par défaut
    Salut,

    Attends, j'aimerais déjà comprendre ce que tu veux...

    Mettons donc que tu aies une spinbox avec min à 10 et max à 100. Que souhaites tu obtenir:
    • si l'utilisateur introduit la valeur 9
    • si l'utilisateur introduit la valeur 101

    A priori, il semble cohérent (à défaut de tout autre comportement que tu pourrais souhaiter) que la première situation modifie la valeur pour lui donner 10 et que la deuxième valeur garde "tout simplement" la dernière valeur valide introduite.

    Si ton problème est que tu voudrais disposer d'un comportement particulier au moment de la perte de focus, tu peux toujours créer une classe perso, dérivée de QDoubleSpinBox, qui réimplémente la fonction (protégée) void focusOutEvent(QFocusEvent *event) en faisant appel (entre autre) à la fonction validate pour choisir ce qui doit être fait

    Si tu veux "tout simplement" que la correction modifie la valeur pour lui donner la première valide la plus proche qui est introduite (10 dans le cas 1, 100 dans le cas 2) ou la dernière valeur valide avant modification, tu peux te tourner vers la fonction setCorrectionMode(CorrectionMode cm) et son énumération QAbstractSpinBox::CorrectionMode

    Enfin, si tu veux que la valeur ne soit purement et simplement pas modifiée, tu auras peut-être tout aussi vite fait de faire en sorte qu'elle soit toujours valide en placant des valeur "très petites" et "très grandes" comme limites (respectivement std::numeric_limits<double>::min() et std::numeric_limits<double>::max(), par exemple )

  3. #3
    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 : 662
    Points
    662
    Par défaut
    Le comportement de base me correspond relativement bien dans le cas du '101' car tu ne peux justement pas taper ce nombre, ta saisie s'arrête à '10' dans le cas où tu voulais taper '101'. Par contre, lorsque tu veux taper '9' alors que le min c'est '10' alors tu es capable de le faire mais elle sera corrigée automatiquement sans le "savoir". Du coup ce que je voudrais, c'est savoir qu'une valeur "invalide" a été tapé avant que Qt la modifie pour prendre une décision quelconque et pourquoi pas redonner la main à Qt pour qu'il corrige.

    Du coup, je vais regarder du côté de la méthode focusOutEvent que je n'ai pas encore essayé de surcharger.

    Merci pour la réponse.


    [EDIT]
    Je viens de tester la méthode focusOutEvent mais malheureusement au moment où je rentre dedans, j'ai déjà la valeur "corrigée"...
    [/EDIT]

    [EDIT2]
    Je reviens après avoir relu ton message et c'est carrément pas con de mettre une valeur min/max fixe très grande malgré que j'ai une valeur min/max fixé par quelque chose d'extérieur... parce que effectivement la correction automatique ne se fera jamais et je peux faire moi-même la vérification des bornes et opérer la correction quand moi j'ai envie que cela se fasse... Je vais plonger dans l'implémentation de ce système et je reviens ici pour donner des nouvelles
    [/EDIT2]

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

Discussions similaires

  1. Système checkbox et image de validation
    Par drag0vich dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/11/2012, 19h17
  2. [WPF] Système de validation indépendant du binding
    Par tomlev dans le forum Contribuez
    Réponses: 0
    Dernier message: 22/09/2008, 02h46
  3. [Système] Lien valide pour contexte particulier
    Par hpl76 dans le forum Langage
    Réponses: 3
    Dernier message: 12/01/2007, 17h34

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