Qt动画框架设计飞入-消失特效

用Qt动画框架设计飞入-消失特效

Qt动画框架很强大,只要你想得到,它就有可能帮你实现。这一次我将抽取上一个演示程序的部分来进行介绍。这一部分我命名为“飞入 - 消失”特效,主要用在文字的显示方面,从这点上说很像PowerPoint上面特效的一种。

还是首先看看我的demo吧。下载地址:这里

原创博客,反对未经允许的转载。原博客地址:http://blog.csdn.net/jiangcaiyang123/article/details/8899279

下面是FlyInVanish类的部分定义:
[cpp]  view plain copy
  1. class FlyInVanishEffect: public QObject// 飞入 - 消失特效类  
  2. {  
  3.     Q_OBJECT  
  4.     Q_PROPERTY( QPointF Pos READ Pos WRITE setPos )  
  5. public:  
  6.     FlyInVanishEffect( QWidget* pWidget = 0 );  
  7.     virtual ~FlyInVanishEffect( void );  
  8.     void AddText( const QString& text );  
  9.     void RenderPixmap( QPixmap& pixmap );  
  10. signals:  
  11.     void Start( void );  
  12.     void VanishStart( void );  
  13. public slots:  
  14.     void StartEffect( void );  
  15. private slots:  
  16.     void PauseFinished( void );  
  17. private:  
  18.     void PreparePixmap( const QString& text );  
  19.   
  20.   
  21.     DECLRARE_PROPERTY_WITH_GETTERS_AND_SETTERS( QPointF, Pos )  
  22.     QStringList m_StringList;// 字符串列表  
  23.   
  24.   
  25.     // 状态机部分  
  26.     QState m_InitialState, m_MiddleState, m_FinalState;  
  27.     QStateMachine m_Machine;  
  28.   
  29.   
  30.     // 动画部分  
  31.     QPropertyAnimation m_FlyInAnim, m_RiseAnim, m_VanishAnim;  
  32.     QParallelAnimationGroup m_VanishAnimGrp;  
  33.     QTimer m_PauseTimer;  
  34.     bool m_HasFinished;  
  35.   
  36.   
  37.     // 绘图部分  
  38.     QPointF m_SavedPos;  
  39.     LinearGradient m_Gradient;  
  40.     QPixmap m_TextPixmap;  
  41.   
  42.   
  43.     // 父窗口指针  
  44.     QWidget* m_pWidget;  
  45. };  
这里我定义了三个状态和一个状态机。考虑到状态要循环切换,所以我没有使用QFinalState。而配合这些状态切换的是几个QPropertyAnimation的实例:m_FlyInAnim负责飞入,m_RiseAnim负责上升,而m_VanishAnim负责消失动画。其中m_RiseAnim和m_VanishAnim是并行进行的,所以需要一个QParallelAnimationGroup类的实例:m_VanishAnimGrp。此外我尝试了一下QPauseAnimation,似乎不能将它和其它的动画结合在一起,只能放在QSequentialAnimationGroup中,因此我没有使用这个类而是使用了一个QTimer来进行动画的延时。
其实这个特效的原理也很简单:首先维护一个字符串列表m_StringList,然后从中一个个拿出字符串,渲染成m_TextPixmap,最后对这个m_TextPixmap进行动画操作。最后LinearGradient类为了实现动画而继承自QObject和QLinearGradient,这样就有办法实现消失特效了。
在使用的时候,只要m_StringList有元素,调用StartEffect()这个函数就可以实施动画操作了。此外为了防止错误而新增了若干条判断语句,这些都在cpp文件中有所展现。详细情况请下载我的源代码。

下面是我制作的另一个程序,你可以在输入框中输入任何文字,只要按下了Enter键就可以启动动画。这里给出了演示程序和源代码。


演示程序下载地址: 这里
源代码下载地址: 这里



FROM: http://blog.csdn.net/gamesdev/article/details/8899279

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值