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.
#include "dialog.h" #include "ui_dialog.h" #include <QtGui> //sisältää tikonemäärittelyt /* 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 QState *tila1 = new QState(); //lisätään tilalle ominaisuus tila1->assignProperty(ui->button, "text", trUtf8("Ulkona")); //tehdään toinen tila QState *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 QEventTransition *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 QEventTransition *leaveTransition = new QEventTransition(ui->button, QEvent::Leave); leaveTransition->setTargetState(tila1); tila2->addTransition(leaveTransition); //tehdään vielä kolmas tila QState *tila3 = new QState(); tila3->assignProperty(ui->button, "text", trUtf8("Nappia painetaan...")); //tilasiirtymä napinpainosta QEventTransition *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); //tilna siirtymä napin vapautuksesta QEventTransition *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(); }