Qt Examples 之moveblocks工程分析

moveblocks工程存放在Qt安装目录下的
Examples\Qt-x.xx.xx\widgets\animation\moveblocks目录下。其中
x.xx.xx为Qt的版本号。

1.难点函数解释

QState *createGeometryState(QObject *w1, const QRect &rect1,
                            QObject *w2, const QRect &rect2,
                            QObject *w3, const QRect &rect3,
                            QObject *w4, const QRect &rect4,
                            QState *parent)
{
    QState *result = new QState(parent);
    result->assignProperty(w1, "geometry", rect1);
    result->assignProperty(w2, "geometry", rect2);
    result->assignProperty(w3, "geometry", rect3);
    result->assignProperty(w4, "geometry", rect4);

    return result;
}

上面的函数创建了一个以parent为父的状态对象,并返还给调用方。当外层调用方进入到这个新创建的状态时,会同时改变参数w1、w2、w3、w4指向的对象的geometry属性分别为rect1、rect2、rect3、rect4。

state1 = createGeometryState(button1, QRect(100, 0, 50, 50),
                                 button2, QRect(150, 0, 50, 50),
                                 button3, QRect(200, 0, 50, 50),
                                 button4, QRect(250, 0, 50, 50),
                                 group);


  ...................................................
 


state7 = createGeometryState(button1, QRect(0, 0, 50, 50),
                                 button2, QRect(250, 0, 50, 50),
                                 button3, QRect(0, 250, 50, 50),
                                 button4, QRect(250, 250, 50, 50),
                                 group);

上面代码段创建了7个状态对象,且都是以group为父,根据Qt的状态机框架知识,我们得知那么这7个状态就组成了一组。

2.动画及动画组的创建及关系分析

QParallelAnimationGroup animationGroup;

  .....................................
  .....................................
  .....................................



   subGroup->addAnimation(anim);

 以上代码创建了串行动画组、并行动画组。创建完后,各动画之间的关系如下:

 其中外框矩形所在的动画或动作组为内框或框内动画、动画组的父。

3. StateSwitchEvent类分析

StateSwitchEvent派生自QEvent,类很简单,不在分析。

4. StateSwitchTransition分析

StateSwitchTransition派生自QAbstractTransition,其中eventTest的函数判断引起状态进入到本事务的事件类型是不是3步骤中的事件类型,如果是且事件的m_rand和本事务的m_rand相等,即如果这两个条件都为true,则外层调用方就会转到本事务。

5. StateSwitcher分析

StateSwitcher类派生自QState,对onEntry函数进行了重写,在该函数中不停的产生[0, m_stateCount) + 1)范围内的随机数,直到产生一个不等于m_lastIndex的随机数,然后状态机对象会投递一个StateSwitchEvent的事件,如果满足4中的条件,则就会执行4中的StateSwitchTransition事务。

6 流程图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值