Qt 动画详解二
来源:互联网 发布:js 拆分字符串为数组 编辑:程序博客网 时间:2024/06/05 08:33
将动画们弄到一起
QanimationGroup的子类们(QSequentialAnimationGroup和QParallelAnimationGroup)是其它动画的容器,所以这些动画既可以并行也可以串行。QAnimationGroup是一个非属性动画的例子,但是它定期的收到时间改变的通知。这使得它可以把时间改变传输给所包含的动画们,从而控制何时播放那些动画们。
让我们看一下使用QSequentialAnimatoinGroup和QParallelAnimationGroup的代码示例。
QPushButton *bonnie = new QPushButton("Bonnie");
bonnie->show();
QPushButton *clyde = new QPushButton("Clyde");
clyde->show();
QPropertyAnimation *anim1 = new QPropertyAnimation(bonnie, "geometry");
// Set up anim1
QPropertyAnimation *anim2 = new QPropertyAnimation(clyde, "geometry");
// Set up anim2
QParallelAnimationGroup *group = new QParallelAnimationGroup;
group->addAnimation(anim1);
group->addAnimation(anim2);
group->start();
一个并行group在同一时刻播放多个动画。对start()的调用将启动它所统治的所有的动画。
QPushButton button("Animated Button");
button.show();
QPropertyAnimation anim1(&button, "geometry");
anim1.setDuration(3000);
anim1.setStartValue(QRect(0, 0, 100, 30));
anim1.setEndValue(QRect(500, 500, 100, 30));
QPropertyAnimation anim2(&button, "geometry");
anim2.setDuration(3000);
anim2.setStartValue(QRect(500, 500, 100, 30));
anim2.setEndValue(QRect(1000, 500, 100, 30));
QSequentialAnimationGroup group;
group.addAnimation(&anim1);
group.addAnimation(&anim2);
group.start();
QsequentialAnimationGroup顺序的播放它的动画们。它在上一个完成时按顺序播放下一个。
既然一个动画组本就是一个动画类,你可以把它添加到其它组中。如此,你可以建立起一个动画树。
当使用状态机,我们可以使用一个QSignalTransition或QEventTransition类在状态转换时连接一个或多个动画。这些类都是从QAbstractTransition派生的,它们定义了简易的函数addAnimation(),使得能够添加一个或多个动画,在状态转换时启动这些动画。
我们还可能连接属性与状态,而不是手动设置开始与结束值。下面是完整的代码,演示了动画一个QPushButton的geometry属性。
QPushButton *button = new QPushButton("Animated Button");
button->show();
QStateMachine *machine = new QStateMachine;
QState *state1 = new QState(machine);
state1->assignProperty(button, "geometry", QRect(0, 0, 100, 30));
machine->setInitialState(state1);
QState *state2 = new QState(machine);
state2->assignProperty(button, "geometry", QRect(250, 250, 100, 30));
QSignalTransition *transition1 = state1->addTransition(button,
SIGNAL(clicked()), state2);
transition1->addAnimation(new QPropertyAnimation(button, "geometry"));
QSignalTransition *transition2 = state2->addTransition(button,
SIGNAL(clicked()), state1);
transition2->addAnimation(new QPropertyAnimation(button, "geometry"));
machine->start();
- Qt 动画详解二
- Qt 动画详解二
- Qt动画框架详解
- Qt 动画详解一
- Qt 动画详解一
- Qt 动画详解一
- Qt动画框架详解
- Animation动画详解二
- android动画详解二 属性动画原理
- android 动画详解(二)
- android动画详解(二)
- Qt编写自定义控件二动画按钮
- 详解Qt的动画框架(一)
- cocos2d-x 动画详解之二CCSpriteBatchNode
- jQuery源码之动画详解二
- 【Android 动画】Property Animation详解(二)
- 2016 Android 动画 详解 干货(二)
- CABaseAnimation收录:二、CAAnimation动画详解
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- WdatePicker日历控件使用方法
- Spring IOC 详解
- CyberLink for Java 编程指南
- Androi学习:Camera初探——控制摄像头拍照
- Qt 动画详解二
- jQuery基础学习(一)
- 查询按钮如何做到报表中
- windows phone开发学习--录音
- redis学习笔记之虚拟内存
- OpenCV c接口与c++接口
- 让你的Android应用支持转移到SD卡
- Java模拟HTTP的Get和Post请求
- iPhone开发、ObjectiveC_面试题目