如果将状态机API和Qt中的动画API相关联,那么就可以使分配到状态上的属性实现动画效果。在前面的程序中先添加文件:
#include <QSignalTransition>
#include <QPropertyAnimation>
然后将进行状态切换的代码更改如下:QSignalTransition *transition1 = s1->addTransition(&button,
&QPushButton::clicked, s2);
QSignalTransition *transition2 = s2->addTransition(&button,
&QPushButton::clicked, s3);
QSignalTransition *transition3 = s3->addTransition(&button,
&QPushButton::clicked, s1);
QPropertyAnimation *animation = new QPropertyAnimation(&button, "geometry");
transition1->addAnimation(animation);
transition2->addAnimation(animation);
transition3->addAnimation(animation);
这样就可以在状态切换时使用动画效果了。在属性上添加动画,就意味着进入一个状态时分配的属性将无法生效,而是在进入时开始播放动画,然后以平滑的动画来达到属性分配的值。这里无需为动画设置开始和结束的,他们会被隐含的进行设置,开始值就是开始播放动画时属性的当前值,结束值就是状态分配的属性的值。