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
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值