You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Current »

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.

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

}
  • No labels
You must log in to comment.