用Qt动画框架设计飞入-消失特效
Qt动画框架很强大,只要你想得到,它就有可能帮你实现。这一次我将抽取上一个演示程序的部分来进行介绍。这一部分我命名为“飞入 - 消失”特效,主要用在文字的显示方面,从这点上说很像PowerPoint上面特效的一种。还是首先看看我的demo吧。下载地址:这里
原创博客,反对未经允许的转载。原博客地址:http://blog.csdn.net/jiangcaiyang123/article/details/8899279
下面是FlyInVanish类的部分定义:- class FlyInVanishEffect: public QObject// 飞入 - 消失特效类
- {
- Q_OBJECT
- Q_PROPERTY( QPointF Pos READ Pos WRITE setPos )
- public:
- FlyInVanishEffect( QWidget* pWidget = 0 );
- virtual ~FlyInVanishEffect( void );
- void AddText( const QString& text );
- void RenderPixmap( QPixmap& pixmap );
- signals:
- void Start( void );
- void VanishStart( void );
- public slots:
- void StartEffect( void );
- private slots:
- void PauseFinished( void );
- private:
- void PreparePixmap( const QString& text );
- DECLRARE_PROPERTY_WITH_GETTERS_AND_SETTERS( QPointF, Pos )
- QStringList m_StringList;// 字符串列表
- // 状态机部分
- QState m_InitialState, m_MiddleState, m_FinalState;
- QStateMachine m_Machine;
- // 动画部分
- QPropertyAnimation m_FlyInAnim, m_RiseAnim, m_VanishAnim;
- QParallelAnimationGroup m_VanishAnimGrp;
- QTimer m_PauseTimer;
- bool m_HasFinished;
- // 绘图部分
- QPointF m_SavedPos;
- LinearGradient m_Gradient;
- QPixmap m_TextPixmap;
- // 父窗口指针
- QWidget* m_pWidget;
- };
其实这个特效的原理也很简单:首先维护一个字符串列表m_StringList,然后从中一个个拿出字符串,渲染成m_TextPixmap,最后对这个m_TextPixmap进行动画操作。最后LinearGradient类为了实现动画而继承自QObject和QLinearGradient,这样就有办法实现消失特效了。
在使用的时候,只要m_StringList有元素,调用StartEffect()这个函数就可以实施动画操作了。此外为了防止错误而新增了若干条判断语句,这些都在cpp文件中有所展现。详细情况请下载我的源代码。
下面是我制作的另一个程序,你可以在输入框中输入任何文字,只要按下了Enter键就可以启动动画。这里给出了演示程序和源代码。
源代码下载地址: 这里
FROM: http://blog.csdn.net/gamesdev/article/details/8899279