2011-01-27 1 views
1

상태 시스템에 대한 사용자 정의 게시 이벤트가 수락되었는지 확인해야합니다. 내 접근 방식은 QStateMachine을 하위 클래스로 만드는 것입니다. http://doc.qt.nokia.com/latest/statemachine-api.html 섹션 이벤트, 전환 및 보호자QStateMachine에 게시/거부 된 QEvent를 어떻게 감지합니까?

아래 코드에서 놓친 것이 없는지 궁금합니다. 다른/더 나은 접근법이 없습니까?

bool MyStateTransition::eventTest(QEvent *e) 
{ 
    if (e->type() != QEvent::Type(QEvent::User+1)) // MyEvent 
     return false; 

    MyEvent *se = static_cast<MyEvent*>(e); 

    if(m_value != se->value) 
    { 
     se->setRejected(true); 
     return false; 
    } 
    qDebug() << "MyStateTransition::eventTest() - Transition " << m_value << " accepting event " << se->value; 
    se->setRejected(false); 
    return true; 
} 

그리고 거부 감지하는 내가 지금까지에 찾을 수있는 간단한 방법은 이것이다 : 기본적으로 여기

는 Qt는 문서에 따라 동일

void MyStateMachine::endSelectTransitions(QEvent *event) 
{ 
    if (event->type() != QEvent::Type(QEvent::User+1)) return; 

    MyEvent *se = static_cast<MyEvent*>(event); 
    if(se->rejected()) 
     emit eventRejected(se); 
    else 
     //Not really needed since we can use triggered() which will fire after 
     emit eventAccepted(se); 

} 
+0

이'MyStateMachine :: endSelectTransitions' 메소드는 무엇입니까? –

+0

상태 머신이 모든 대상 전이 ("QStateMachine"의 일부)를 "넘어"갔을 때 호출되는 가상 메소드 –

+0

워드 프로세서에서 보이지 않습니다. 그것에 대한 링크를 게시 할 수 있습니까? –

답변

0

좋아, 마지막으로 응답 내 자신의 질문 : 작동하지만 공식적으로 문서화되지 않았기 때문에 기본적으로 해킹입니다.