简述

QPauseAnimation类为QSequentialAnimationGroup提供了一个暂停。

如果你想为QSequentialAnimationGroup动画之间添加延迟,可以插入一个QPauseAnimation。它没有任何动画,但当在指定的毫秒数之内开始运行时不会结束。可以通过构造函数指定暂停的时间,也可以通过setDuration()设置。

没必要自己建立一个QPauseAnimation,QSequentialAnimationGroup提供了便利的函数addPause()和insertPause(),这些函数可以简单地暂停应该持续的毫秒数。

公共函数

  • void setDuration(int msecs)

    设置暂停的毫秒数。

    暂停持续的时间不应该是负的,默认的时间是250毫秒。

示例

下面,我们通过QSequentialAnimationGroup来构建一个串行动画组,并添加属性动画QPropertyAnimation和暂停动画QPauseAnimation,这里也可以使用addAnimation()添加其它动画/动画组,就不予演示了。

效果

源码

MainWindow::MainWindow(QWidget *parent)
: CustomWindow(parent)
{
... QPushButton *pStartButton = new QPushButton(this);
pStartButton->setText(QString::fromLocal8Bit("开始动画")); QList<QLabel *> list;
QStringList strList;
strList << QString::fromLocal8Bit("一去丶二三里") << QString::fromLocal8Bit("青春不老,奋斗不止"); for (int i = 0; i < strList.count(); ++i)
{
QLabel *pLabel = new QLabel(this);
pLabel->setText(strList.at(i));
pLabel->setAlignment(Qt::AlignCenter);
list.append(pLabel); pLabel->setObjectName("highlightLabel");
} // 动画一
QPropertyAnimation *pAnimation1 = new QPropertyAnimation(list.at(0), "geometry");
pAnimation1->setDuration(1000);
pAnimation1->setStartValue(QRect(0, 0, 100, 30));
pAnimation1->setEndValue(QRect(120, 130, 100, 30));
pAnimation1->setEasingCurve(QEasingCurve::OutBounce); // 暂停 - 特殊的动画
QPauseAnimation *pPauseAnimation = new QPauseAnimation(this);
pPauseAnimation->setDuration(1000); // 动画二
QPropertyAnimation *pAnimation2 = new QPropertyAnimation(list.at(1), "geometry");
pAnimation2->setDuration(1000);
pAnimation2->setStartValue(QRect(120, 130, 120, 30));
pAnimation2->setEndValue(QRect(170, 0, 120, 30));
pAnimation2->setEasingCurve(QEasingCurve::OutInCirc); m_pGroup = new QSequentialAnimationGroup(this); // 添加动画
m_pGroup->addAnimation(pAnimation1);
m_pGroup->addAnimation(pPauseAnimation);
m_pGroup->addAnimation(pAnimation2); // 循环2次
m_pGroup->setLoopCount(2); // 连接信号槽
connect(pStartButton, SIGNAL(clicked(bool)), this, SLOT(startAnimation()));
connect(m_pGroup, SIGNAL(currentAnimationChanged(QAbstractAnimation*)), this, SLOT(onCurrentAnimationChanged(QAbstractAnimation*))); ...
}

槽函数如下:

// 开始动画
void MainWindow::startAnimation()
{
m_pGroup->start();
} // 动画切换时会调用
void MainWindow::onCurrentAnimationChanged(QAbstractAnimation *current)
{
QPropertyAnimation *pAnimation = dynamic_cast<QPropertyAnimation *>(current);
if (pAnimation == NULL)
return; QLabel *pLabel = dynamic_cast<QLabel *>(pAnimation->targetObject());
if (pLabel != NULL)
pLabel->setText(pLabel->text() + ".");
}

这里需要注意,暂停也是一个动画(比较特殊而已),所以我们需要用dynamic_cast来转换,并判断是否为NULL(否则会crash)。

更多参考

Qt之QPauseAnimation的更多相关文章

  1. Qt之窗口动画(下坠、抖动、透明度)

    简述 前面几节中我们介绍了关于动画的基本使用,有属性动画.串行动画组.并行动画组.这节我们来实现一些特效,让交互更顺畅. 简述 示例 效果 源码 更多参考 示例 下面,我们以geometry.pos. ...

  2. Qt之QParallelAnimationGroup

    简述 QParallelAnimationGroup类提供动画的并行组. QParallelAnimationGroup - 一个动画容器,当它启动的时候它里面的所有动画也启动,即:并行运行所有动画, ...

  3. Qt之QSequentialAnimationGroup

    简述 QSequentialAnimationGroup类提供动画的串行组. QSequentialAnimationGroup是一个串行运行动画的QAnimationGroup,在另一个动画播放结束 ...

  4. Qt之QPropertyAnimation

    简述 QPropertyAnimation类定义了Qt的属性动画. QPropertyAnimation以Qt属性做差值,作为属性值存储在QVariants中,该类继承自QVariantAnimati ...

  5. Qt之动画框架

    简述 Qt动画框架旨在为创建动画和平滑的GUI提供了一种简单的方法.通过Qt动画属性,该框架为部件和其它QObject对象的动画操作提供了非常大的自由性,框架也可以被用于图形视图框架中,动画框架中许多 ...

  6. 《Qt 实战一二三》

    简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...

  7. Qt之窗口动画(下坠、抖动、透明度)(还有好多相关帖子)

    简述 前面几节中我们介绍了关于动画的基本使用,有属性动画.串行动画组.并行动画组.这节我们来实现一些特效,让交互更顺畅. 简述 示例 效果 源码 更多参考 示例 下面,我们以geometry.pos. ...

  8. Qt动画效果的实现,QPropertyAnimation

    Qt动画架构中的主要类如下图所示: 动画框架由基类QAbstractAnimation和它的两个儿子QVariantAnimation和QAnimationGroup组成.QAbstractAnima ...

  9. Qt动画与Qt坐标小记

    Qt动画 转载自: <http://jingyan.baidu.com/article/154b46315757b628ca8f4116.html> 和  <http://blog. ...

随机推荐

  1. 让PHP 5.3支持MSSQL连接

    最近在Windows Server 2008配置了PHP环境,想要连接SQL Server 2008,但是悲催的发现,从5.3开始,PHP自带的dll不再支持2000以后的MS SQL Server了 ...

  2. DIV与IDIV的用法

    DIV (unsigned divide) 无符号数除法 格式:DIV SRC 执行的操作: 字节操作:16位被除数在AX,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中.表示为 (AL) ...

  3. JavaScript经典代码【二】【javascript判断用户点了鼠标左键还是右键】

    IE 下 onMouseDown 事件有个 events.button 可以返回一个数值,根据数值判断取得用户按了那个鼠标键 events.button==0 默认.没有按任何按钮. events.b ...

  4. 【Asp.Net使用EasyUI】EasyUI combox实现联动

    很多时候都会用到combox的联动效果,选择上一个combox的值就自动带出这个值对应的其它信息,比如省市联动,最近我也刚好遇到了类似的要求,是用EasyUI  combobox 控件完成的,如果是A ...

  5. python tools: iPython Notebook

    Introducing IPython Notebook IPython isn't a different programming language, it's just a set of comp ...

  6. python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)

    python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...

  7. css3 3d学习笔记

    几个属性: -webkit-perspective:0;景深(默认0), -webkit-perspective-origin:center center;景深基点(默认中间), -webkit-tr ...

  8. Jquery基本、层次选择器

    基本选择器: $("#none").css("background","#bbffaa"); 改变id为none的所有元素的背景色 $(&q ...

  9. HIHO 线段树(单点)

    #include <stdio.h> #include <string.h> #include <math.h> #include <iostream> ...

  10. jsp的el表达式

    el表达式的英文(Expression Language) 1.访问 javabean,list,map,数组 2.可以进行一些运算 3.获得web开发的常用对象 导入jstl.jar和stander ...