Qt qstate机器错误状态

Qt qstate机器错误状态,qt,state,qstatemachine,Qt,State,Qstatemachine,我有三种状态的状态机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->addTran

我有三种状态的状态机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 );

看来会奏效的,是的。必须为所有状态调用addTransition()可能有点麻烦,因此可以通过向所有状态添加父状态来对它们进行分组。然后您只需要在父级上进行一次错误转换。

有时将state1、state2、state3放入一个超级状态可能会很有用。然后您只需添加一个从超级状态到错误状态的转换。所有亚州也将“遵循”这一过渡。
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 );