我有三个状态s1,s2,s3和s4的状态机。从状态s1,s2和s3机器可以进入错误状态。
QStateMachine machine;
QState *s1 = new QState();
QState *s2 = new QState();
QState *s3 = new QState();
QFinalState *s4 = new QFinalState();
s1->addTransition(object, SIGNAL(done()), s2);
s2->addTransition(object, SIGNAL(done()), s3);
s3->addTransition(object, SIGNAL(done()), s4);
machine.addState(s1);
machine.addState(s2);
machine.addState(s3);
machine.addState(s4);
machine.setInitialState(s1);
最好的方法是什么?我在谷歌上搜索,但没有运气。 做这样的事情可以吗?
QFinalState *sx = new QFinalState();
machine.addState(sx);
s1->addTransition(object, SIGNAL(error()), sx );
s2->addTransition(object, SIGNAL(error()), sx );
s3->addTransition(object, SIGNAL(error()), sx );
答案 0 :(得分:1)
QFinalState *sx = new QFinalState();
machine.addState(sx);
s1->addTransition(object, SIGNAL(error()), sx );
s2->addTransition(object, SIGNAL(error()), sx );
s3->addTransition(object, SIGNAL(error()), sx );
看起来它会起作用,是的。必须为所有状态调用addTransition()可能有点麻烦,因此您可以通过向父级添加父状态来对所有状态进行分组。那么你只需要在父级上进行一次错误转换。