0

我有具有三个状态 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 );
4

1 回答 1

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() 可能有点麻烦,因此您可以通过向它们添加父状态来对所有状态进行分组。然后,您只需要在父级上进行一次错误转换。

于 2013-03-16T19:10:34.727 回答