QStateMachine을 만들었으므로 상태가 전환 된 이벤트를 가져와야합니다. 내 슬롯 EnterStateInit()
에이 전화를 걸었을 때 신호를받을 기회가 없습니까? 여기 내 예제 코드 :QStateMachine 상태 가져 오기 이벤트가 발생합니다.
CreateStateMachine()
{
QState *Init = new QState();
QState *CheckPrecondition = new QState();
QState *DoWork = new QState();
Init->addTransition(this, SIGNAL(EventStart()), CheckPrecondition);
CheckPrecondition->addTransition(this, SIGNAL(EventSuccesfulCondition()), DoWork);
CheckPrecondition->addTransition(this, SIGNAL(EventNotSuccesfulCondition()), Init);
DoWork->addTransition(this, SIGNAL(EventWorkDone()), Init);
DoWork->addTransition(this, SIGNAL(EventError()), Init);
connect(Init, SIGNAL(entered()), this, SLOT(EnterStateInit()));
connect(CheckPrecondition, SIGNAL(entered()), this, SLOT(CheckPrecondition()));
connect(DoWork, SIGNAL(entered()), this, SLOT(DoWork()));
connect(Init, SIGNAL(exited()), this, SLOT(LeaveStateInit()));
connect(CheckPrecondition, SIGNAL(exited()), this, SLOT(LeaveStateCheckPrecondition()));
connect(DoWork, SIGNAL(exited()), this, SLOT(LeaveDoWork()));
mModuleStateMachine.addState(Init);
mModuleStateMachine.addState(CheckPrecondition);
mModuleStateMachine.addState(DoWork);
mModuleStateMachine.start();
}
EnterStateInit()
{
/* Get Event which caused this SLOT to react */
SetStatus();
}
정확히 무엇을하려합니까? – thuga
@thuga 필자는 서면 매뉴얼을 대체하기 위해 Tool에서 일하고있다. 이 도구는 일부 수동 단계를 자동으로 수행하고 다른 단계는 수동으로 수행해야합니다. State Init에 들어가면 (한 단계 완료)이 단계의 상태를 설정하고 싶습니다. 무언가 잘못 되었으면 (Precondition unsuccesful 또는 Cancel이 클릭 되었음) 상태 Init로 들어가고 상태를 설정합니다. 상태 Init에 들어가기 전에 무언가 잘못되었는지 알아야합니다. 따라서 어떤 신호로 인해 SLOT EnterStateInit()이 반응하여 단계의 상태를 설정하는지 알 수있는 기회를 찾고 있습니다. – Lehtim
그러면 오류의 새 상태를 만들어 보지 않으시겠습니까? 결국, 그것은 다른 상태입니다. – thuga