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] Afficher la valeur maximale si la valeur entrée lui est supérieure


Sujet :

Qt

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut [QDoubleSpinBox] Afficher la valeur maximale si la valeur entrée lui est supérieure
    Bonjour a tous,

    Je souhaite afficher la valeur maximum de ma qdoublespinbox lorsque je rentre une valeur supérieure à celle-ci (par exemple si le max est 100 et que j'écris 105 alors la valeur affichée sera 100).

    La seule solution que j'ai trouvée c'est de dériver de qdoublespinbox pour surcharger validate().

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    DoubleSpinBoxSupport::DoubleSpinBoxSupport( QWidget * parent):QDoubleSpinBox(parent)
    {
     
    	connect(this, SIGNAL(changevaluetomax_si()), this, SLOT(changevaluetomax_sl()) );
     
    }
     
    QValidator::State DoubleSpinBoxSupport::validate( QString & input, int & pos ) const
    {
    //il y a un suffix de 2 caractères
    	if(input.length()>2)
    	{
    		QString newtext = input.left(input.length()-2);
     
    		if( newtext.toDouble()>this->maximum() )
    		{
    			emit changevaluetomax_si();
     
    			return QValidator::Acceptable;
    		}
     
    	}
    	return QDoubleSpinBox::validate(input, pos);
    }
     
    void DoubleSpinBoxSupport::changevaluetomax_sl()
    {
    	this->setValue(this->maximum());
    }
    En debuggant je vois bien que mon test fonctionne, seulement à la fin, la valeur est réinitialisée à 0 (le minimum).

    Quelqu'un peut-il m'expliquer ? Il y a t il une autre solution ?

    Merci par avance.

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ce n'est peut être pas clair.

    Pour être plus simple, admettons que ma QDoubleSpinBox soit bornée entre 0 et 10.
    Si je veux taper 20, je ne vais pouvoir écrire que 2.
    A la place de ceci, je souhaiterais afficher le max (10 ici) quand j'ai détecté que l'utilisateur a entré un nombre supérieur.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Tu as ce comportement car tu as appelé setMaximumValue(ma_valeur_max). Pour pouvoir entrer n'importe quel nombre, il faut mettre max à l'infini et ensuite lorsque l'édition est terminée (signal), tu vérifies si la valeur entrée est licite et la corriges si besoin.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/01/2006, 14h18
  2. recherche valeur maximale entre deux champs
    Par maysa dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/05/2005, 10h40
  3. valeur maximale de session.timeout?
    Par ryan dans le forum ASP
    Réponses: 3
    Dernier message: 13/09/2004, 23h11
  4. Valeur maximale d'un tableau
    Par Yana dans le forum Langage
    Réponses: 4
    Dernier message: 20/06/2003, 16h21
  5. [VB6] [Scrollbar] Valeur maximale supérieure à 32750
    Par néo333 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/12/2002, 11h24

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