J'ai besoin de voir si un événement personnalisé affiché sur la machine d'état a été accepté ou non. Mon approche est de sous-classer QStateMachine. Voir http://doc.qt.nokia.com/latest/statemachine-api.html section Événements, transitions et gardesComment puis-je détecter QEvent ignoré/rejeté à QStateMachine
Je me demande s'il n'y a pas quelque chose que j'ai manqué dans le code ci-dessous. N'y a-t-il pas une autre/meilleure approche?
Fondamentalement ici est le même que pour le Qt Doc:
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;
}
Et la façon la plus simple que je pourrais trouver trop loin pour détecter le rejet est la suivante:
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);
}
Qu'est-ce que cette méthode 'MyStateMachine :: endSelectTransitions'? –
Une méthode virtuelle qui est appelée quand la machine d'état a "passé" toutes les transitions cibles, (partie de QStateMachine) –
Je ne le vois pas dans docs. Pouvez-vous poster un lien? –