创建状态,设置状态中的属性,设置初始状态,设置状态装换条件、动画,启动状态机
int nMargin = 9;
int nInitWidth = m_pSelMoldForm->width();
int nInitHeight = m_pSelMoldForm->height();
int nConfEpyFormW = m_pConfEpyProForm->width();
int nConfEpyFormH = m_pConfEpyProForm->height();
//设置初始状态状态
m_pStateMachine = new QStateMachine;
QState *InitialState = new QState(m_pStateMachine);
InitialState->assignProperty(this, "size",
QSize(nInitWidth+2*nMargin, nInitHeight+2*nMargin));
InitialState->assignProperty(m_pSelMoldForm, "pos", QPoint(nMargin, nMargin));
InitialState->assignProperty(m_pConfEpyProForm, "pos", QPoint(nMargin, -nConfEpyFormH));
//设置配置空白工程状态
QState *ConfEpyState = new QState(m_pStateMachine);
ConfEpyState->assignProperty(this, "size",
QSize(nConfEpyFormW+2*nMargin, nConfEpyFormH+2*nMargin));
ConfEpyState->assignProperty(m_pSelMoldForm, "pos", QPoint(-nInitWidth, nMargin));
ConfEpyState->assignProperty(m_pConfEpyProForm, "pos", QPoint(nMargin, nMargin));
//设置状态机的出示状态
m_pStateMachine->setInitialState(InitialState);
//设置状态转换方式,由初始状态到配置空白工程的转换方式
QSignalTransition *tranInitToConfEpy =
InitialState->addTransition(m_pSelMoldForm,
SIGNAL(sg_CreateEmptyProject()),
ConfEpyState);
QSequentialAnimationGroup *pToConf_SA_Group = new QSequentialAnimationGroup;
pToConf_SA_Group->addPause(300);
pToConf_SA_Group->addAnimation(new QPropertyAnimation(this, "size"));
pToConf_SA_Group->addAnimation(new QPropertyAnimation(m_pSelMoldForm, "pos"));
pToConf_SA_Group->addAnimation(new QPropertyAnimation(m_pConfEpyProForm, "pos"));
tranInitToConfEpy->addAnimation(pToConf_SA_Group);
//设置状态转换方式,由配置空白工程到初始状态的转换方式
QSignalTransition *tranBackToInit =
ConfEpyState->addTransition(m_pConfEpyProForm,
SIGNAL(sg_OnCancle()),
InitialState);
QSequentialAnimationGroup *pBackToInit_SA_Group = new QSequentialAnimationGroup;
pBackToInit_SA_Group->addPause(300);
pBackToInit_SA_Group->addAnimation(new QPropertyAnimation(m_pConfEpyProForm, "pos"));
pBackToInit_SA_Group->addAnimation(new QPropertyAnimation(this, "size"));
pBackToInit_SA_Group->addAnimation(new QPropertyAnimation(m_pSelMoldForm, "pos"));
tranBackToInit->addAnimation(pBackToInit_SA_Group);
//启动状态机
m_pStateMachine->start();