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.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 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(); };
merci d'avance
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; }
Partager