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 :

Optimisation d'un bouton à deux états


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut Optimisation d'un bouton à deux états
    Bonjour à tous,

    je viens de créer une classe de boutton(binaryButon) à 2 états. Ainsi avec un bouton je peux générer deux types de signaux (on, off typiquement)
    elle hérite de QPushButton et lors de la constrution j'implémente une QStateMachine qui gère la bascule entre l'état 1 et 2.
    comme dans l'exemple de Qt (statemachine/twowaybutton).

    à priori tout fonctionne, mais je ne suis pas complétement satisfait de la manière dont je l'ai fait.
    connaitriez vous une manière de redirigez le signal clicked() vers le signal s1clicked ou s2clicked en fontion de l'état du bouton??
    pour l'instant j'ai implémenté un slot qui émet le bon signal suivant l'état d'un booléen....

    par souci de clarté, voici le code:

    .h
    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
    class binaryButton : public QPushButton
    {
        Q_OBJECT
    public :
            binaryButton (QString s1Label, QString s2Label, QPushButton *parent = 0);
            ~binaryButton();
            signals :
                    void s1Clicked ();
                    void s2Clicked ();
    private :
            bool state;
            QEventTransition *clickedTransition;
            QStateMachine *machine;
            QState *state1, *state2;
        private slots :
                void emitSate();
    };
    .cpp
    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
    binaryButton::binaryButton(QString s1Label, QString s2Label, QPushButton *parent)
        : QPushButton (parent)
    {    
        state1 = new QState();
        state1->assignProperty(this, "text", s1Label);
     
     
        state2 = new QState();
        state2->assignProperty(this, "text", s2Label);
     
        state1->addTransition(this, SIGNAL(clicked()), state2);
        state2->addTransition(this, SIGNAL(clicked()), state1);
     
        connect(this, SIGNAL(clicked()), this, SLOT(emitSate()));
     
        machine = new QStateMachine ();
        machine->addState(state1);
        machine->addState(state2);
     
        machine->setInitialState(state1);
        machine->start();
     
    }
    void binaryButton::emitSate()
    {
        (state == true) ? emit(s1Clicked()) : emit(s2Clicked());
        (state == true) ? state = false : state = true;
    }
    merci d'avance

  2. #2
    Membre éprouvé
    Avatar de GreatTux
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 77
    Par défaut
    Jamais vraiment utilisé les QState, mais je pense que le code suivant devrait faire l'affaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    connect(state1, SIGNAL(entered()), this, SIGNAL(s1Clicked));
    connect(state2, SIGNAL(entered()), this, SIGNAL(s2Clicked));

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    à priori ca marche:super:
    merci à toi!

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

Discussions similaires

  1. Bouton avec deux états
    Par mawkli dans le forum VB.NET
    Réponses: 4
    Dernier message: 21/03/2013, 17h06
  2. Bouton à deux états + progressbar
    Par bobsaoul dans le forum VBA Access
    Réponses: 0
    Dernier message: 22/04/2008, 10h17
  3. Réponses: 2
    Dernier message: 27/02/2006, 10h08
  4. Fusion de deux états
    Par nancy54 dans le forum QuickReport
    Réponses: 2
    Dernier message: 07/06/2005, 19h07
  5. [FLASH MX] Bouton avec états différents
    Par Chucky69 dans le forum Flash
    Réponses: 5
    Dernier message: 24/08/2004, 12h01

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