...
Seuraavassa
...
esimerkissä
...
toteutetaan
...
tilakone,
...
jossa
...
on
...
kolme
...
tilaa
...
1.
...
hiiri
...
napin
...
ulkopuolella,
...
2.
...
hiiri
...
napin
...
päällä
...
ja
...
3.
...
nappia
...
painettu.
...
Jos
...
haluat
...
tehdä
...
esimerkin,
...
niin
...
tee
...
dialogi
...
wizardilla
...
ja
...
lisää
...
siihen
...
yksi
...
painike.
...
Koipoi
...
alta
...
sopivat
...
kohdat.
Code Block |
---|
} /* Dialog luokkaa tulee lisätä tilakoneen vaatimat muuttujat */ #include <QStateMachine> #include <QEventTransition> .... QStateMachine *machine; QState *tila1; QState *tila2; QState *tila3; QEventTransition *enterTransition; QEventTransition *leaveTransition; QEventTransition *pressTransition; QEventTransition *releaseTransition; { |
Code Block |
---|
} {code} #include "dialog.h" #include "ui_dialog.h" /* Tee tämä luokka wizardilla ÄLÄ KOPIOI, lisää dialogiin nappi ja nimeä se button */ Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); // tehdään tilakone QStateMachine *machine = new QStateMachine(this); //tehdään tila tila1 = new QState(); //lisätään tilalle ominaisuus tila1->assignProperty(ui->button, "text", trUtf8("Ulkona")); //tehdään toinen tila tila2 = new QState(); //lisätään tällekin tilalle ominaisuus tila2->assignProperty(ui->button, "text", trUtf8("Sisällä"));//käytetään trUtf8 funktiota jotta skandit näkyy //lisätään siirtymä=transition, joka tapahtuu kun kursori viedään napin päälle enterTransition = new QEventTransition(ui->button, QEvent::Enter); //määrätään tila johon siirrytään kun hiiri on viety napin päälle enterTransition->setTargetState(tila2); //määrätään mistä tilasta transiitio on mahdollinen tila1->addTransition(enterTransition); //ja sama juttu toiseen suuntaan leaveTransition = new QEventTransition(ui->button, QEvent::Leave); leaveTransition->setTargetState(tila1); tila2->addTransition(leaveTransition); //tehdään vielä kolmas tila tila3 = new QState(); tila3->assignProperty(ui->button, "text", trUtf8("Nappia painetaan...")); //tilasiirtymä napinpainosta pressTransition = new QEventTransition(ui->button, QEvent::MouseButtonPress); pressTransition->setTargetState(tila3); //kun hiiri on napin päällä, on nappia mahdollisuus painaa ja siirrytään tilaan 3 tila2->addTransition(pressTransition); //tilasiirtymä napin vapautuksesta releaseTransition = new QEventTransition(ui->button, QEvent::MouseButtonRelease); releaseTransition->setTargetState(tila2); tila3->addTransition(releaseTransition); //lisätään tilat tilakoneeseen machine->addState(tila1); machine->addState(tila2); machine->addState(tila3); //asetetaan tilakoneen alkutila machine->setInitialState(tila1); //käynnistetään tilakone machine->start(); } {code} |