Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

QStateMachine - nasledjivanje QAbstractState klase

[es] :: C/C++ programiranje :: QStateMachine - nasledjivanje QAbstractState klase

[ Pregleda: 1313 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon QStateMachine - nasledjivanje QAbstractState klase31.01.2011. u 22:05 - pre 160 meseci
Nisam mogao nigde da nadjem neke bolje primere za potrebe funkcionalnosti koju zelim da implementiram...

Objasnicu na primeru da bi bilo jasnije u cemu je problem.

Neka postoji View klasa izvedena iz QWidget koja je centralWidget mainWindowa i njena overrideovana funkcija paintEvent se koristi za crtanje nekih elemenata.
Postoji i toolDialog (npr. dock-ovan) na kojem se nalaze 3 opcije: Select, Create i Transform element.

U zavisnosti koja je opcija aktivirana ja mogu da cuvam state u nekoj promenljivoj:

enum EditorState { Select, Create, Transform }

I onda da u View::mousePressEvent(), View::mouseMoveEvent() i View::mouseReleaseEvent() proveravam u kojem je state-u editor...

Code:

View::mousePressEvent()
{
     if(editorState == Select)
    {
          // selektuj element pod misem
    }
    else if(editorState == Create)
    { 
          Element* pElement = createElement();
    }
    ...
}


Ocigledno da je bolje da se u neke klase izdvoji procesiranje u zavisnosti od state-a. Jedan od izbora je QStateMachine.

Meni je palo na pamet da napravim klase koje su izvedene iz QAbstractState:

I to sam zamislio ovako:

StateSelect
StateCreate
StateTransform

Code:

class StateSelect : public QAbstractState
{
      public:
      void onEnter();
      void onExit();
      bool event();
}

bool StateSelect::event(QEvent* pEvent)
{
      switch(pEvent->type())
      {
           case MousePress: ... break;
           case MouseMove:
           case MouseRelease:
        }
}



Kada startujem masinu nikada ne ulazi u event funkciju.
Treba mi objasnjenje koji je pravilan nacin koriscenja state masine za ovaj slucaj.

EOF
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
89.216.32.*



+2789 Profil

icon Re: QStateMachine - nasledjivanje QAbstractState klase01.02.2011. u 08:10 - pre 160 meseci
A zašto bi ulazila? Koje to događaje treba da obrađuje?
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.static.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: QStateMachine - nasledjivanje QAbstractState klase01.02.2011. u 09:30 - pre 160 meseci
Trebalo bi da obradjuje MousePressEvent, MouseMoveEvent i MouseReleaseEvent.

QAbstractState ima funkciju virtual bool event(QEvent* pEvent) pa sam mislio da nju reimplementiram i da obradjujem evente.
Smisao toga je da izdvojim kod za procesiranje event-a u odvojene klase da ne bih morao sve da trpam u handlere u View klasi pomocu switch/case.
To se moze uraditi i na druge nacine ali ja sam mislio da iskoristim QStateMachine.
Nisam siguran kako bi ovo trebalo pravilno da se uradi sa Statechart frameworkom...


EOF
 
Odgovor na temu

[es] :: C/C++ programiranje :: QStateMachine - nasledjivanje QAbstractState klase

[ Pregleda: 1313 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.