qt状态机的实现

创建状态,设置状态中的属性,设置初始状态,设置状态装换条件、动画,启动状态机

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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值