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

Compare with Current View Page History

« Previous Version 3 Next »

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

}
  • No labels
You must log in to comment.