用Qt动画框架设计飞入-消失特效【附源码】

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

下面是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;
};

相关推荐