Qt动画组
来源:互联网 发布:pcb layout软件 编辑:程序博客网 时间:2024/06/14 07:01
Qt中的动画组是由QAnimationGroup抽象类来表示的。一个动画组是一个动画的容器。动画组一般负责管理它的动画的状态,也就是说由它决定,什么时候开始动画,什么时候停止动画,什么时候暂停动画,什么时候重新运行动画。目前,Qt中提供了两种动画组:并行动画组合串行动画组。
另外,根据Qt帮助文档可知,动画组和动画均继承自QAbstractAnimation,所以,你也可以组合动画组,来构建复杂的动画。但不支持直接启动子动画组,这会导致不可预知的行为。QAnimationGroup提供了添加和获取动画的方法。除此之外,可以使用removeAnimation()来删除动画,使用clear()函数来清空动画组中的动画。还可以通过监听QEvent::ChildAdded 和 QEvent::ChildRemoved 事件来跟踪动画组中动画的变化。
QAnimationGroup 会获取它所管理的动画的所有权,并确保在删除动画组时也删除它们。
下面,我们以属性动画为例,来看一看这两种动画组的使用方式。
新建一个GUI程序,往窗口中拖入两个按钮,稍后我们使用动画来改变这两个按钮的尺寸。再拖入两个按钮,一个用来启动并行动画,一个用来启动串行动画。
界面如下图:
并行动画按钮的槽函数,代码如下:
void Widget::on_parallelBtn_clicked(){ QPropertyAnimation *animation1 = new QPropertyAnimation(ui->targetButton1, "size"); animation1->setDuration(5000); animation1->setStartValue(QSize(50, 50)); animation1->setEndValue(QSize(150, 150)); QPropertyAnimation *animation2 = new QPropertyAnimation(ui->targetButton2, "size"); animation2->setDuration(5000); animation2->setStartValue(QSize(50, 50)); animation2->setEndValue(QSize(100, 100)); QParallelAnimationGroup *paraGroup = new QParallelAnimationGroup(this); paraGroup->addAnimation(animation1); paraGroup->addAnimation(animation2); paraGroup->start();}
当点击并行按钮时,会看到两个targetButton的尺寸同时变化。
串行动画也类似,代码如下:
void Widget::on_sequentialBtn_clicked(){ QPropertyAnimation *animation1 = new QPropertyAnimation(ui->targetButton1, "size"); animation1->setDuration(5000); animation1->setStartValue(QSize(50, 50)); animation1->setEndValue(QSize(150, 150)); QPropertyAnimation *animation2 = new QPropertyAnimation(ui->targetButton2, "size"); animation2->setDuration(5000); animation2->setStartValue(QSize(50, 50)); animation2->setEndValue(QSize(100, 100)); QSequentialAnimationGroup *sequGroup = new QSequentialAnimationGroup(this); sequGroup->addAnimation(animation1); //sequGroup->addPause(3000); sequGroup->addAnimation(animation2); sequGroup->start();}当点击串行动画按钮时,两个动画将按照添加的先后顺序依次执行,即第一个targetButton的尺寸先变化,然后是第二个按钮的尺寸发生变化。
注意,上面注释的那句代码。该句代码可以给串行动画组添加一个暂停。如果把注释去掉,可以看到第一个动画运行结束后,3秒后才开始运行第二个动画,暂停了3秒。其实这是一个向串行动画中插入一个暂停动画的简便方法。而暂停动画由QPauseAnimation类来表示,所以,我们也可以先定义一个该类的实例,然后使用addAnimation()函数将它加入到串行动画组中。代码如下:
QPauseAnimation *pause = new QPauseAnimation; pause->setDuration(3000); sequGroup->addAnimation(pause);用上面的代码替换注释掉的那句,也可以达到将串行动画暂停3秒的作用。
- Qt动画组
- Qt动画
- QT动画
- Qt动画
- QT动画
- 【转】Qt动画组的简单使用
- Qt-4.6动画Animation
- 一个qt 动画 实例
- Qt动画框架
- QT动画三步决
- QT动画框架
- Qt动画框架
- Qt动画效果展示
- Qt动画框架详解
- Qt 动画详解一
- Qt 动画详解一
- QT动画框架
- Qt 动画详解二
- D
- Qt-第一个QML程序-4-自定义按钮类,动画,状态
- 【编程】【leetcode】541. Reverse String II
- Java-String类的常用方法总结
- 冒泡排序
- Qt动画组
- Hbase优化总结
- 【第一篇】EXCEL连接SAP HANA的方法(ODBC)
- spark.mllib源码阅读-bagging方法
- Power Shell 文件和文件夹操作
- 协方差矩阵和相关系数
- Git速查手册(第二版)
- Spring(四) 依赖注入简介和实例分析
- 并发编程--并发编程包LockSupport