Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

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

#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ä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();

}