...
Code Block |
---|
#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 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); //tilasiirtymä 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(); } |