Qt Animation Framework

    С появлением Qt 4.6 реализация анимации в проекте упростилась до минимума.

    В том случае, когда необходима анимация свойств компонента, Qt 4.6 предлагает воспользоваться классом QPropertyAnimation. Вот пример анимации изменения размера виджета:

    1. #include <QWidget>
    2. #include <QPropertyAnimation>
    3. #include <QEasingCurve>
    4.  
    5. class MyWidget : public QWidget {
    6. public:
    7.   MyWidget(QObject* parent = 0);
    8.   // MyWidget fields and methods
    9. public slots:
    10.   void startAnimation();
    11. private:
    12.   QPropertyAnimation* _propertyAnimation;
    13. };
    * This source code was highlighted with Source Code Highlighter.


    1. MyWidget::MyWidget(QObject *parent) : QWidget(parent) {
    2.   // Widget initialization
    3.   _propertyAnimation = new QPropertyAnimation(this,"geometry");
    4.   _propertyAnimation->setDuration(1000);
    5.   _propertyAnimation->setEasingCurve(QEasingCurve::OutCubic);
    6. }
    7.  
    8. void MyWidget::startAnimation() {
    9.   QRectF firstPosition;
    10.   QRectF endPosition;
    11.   // Initializing first and end values
    12.   _propertyAnimation->setFirstValue(firstPosition);
    13.   _propertyAnimation->setEndValue(endPosition);
    14.   _propertyAnimation->start();
    15. }
    * This source code was highlighted with Source Code Highlighter.


    С помощью метода setDuration(int) задаётся продолжительность анимации, а с помощью метода setEasingCurve(const QEasingCurve&) задается кривая изменения значения с течением времени. В данном примере выбрана кривая OutQuad


    Собственно, 6 строчек и все.

    Для анимации значения не являющегося свойством можно отнаследоваться от QVariantAnimation и переопределить метод void updateCurrentValue(const QVariant&). В этом методе необходимо описать логику того что должно произойти при изменении значения.

    QVariantAnimation поддерживает следующие типы: Int, Double, Float, QLine, QLineF, QPoint, QSize, QSizeF, QRect,QRectF. Если тип изменяемого значения не принадлежит ни одному из вышеперечисленных — надо переопределить метод интерполяции virtual QVariant interpolated ( const QVariant & from, const QVariant & to, qreal progress ) const

    Вот пример того что получилось:
    Поделиться публикацией

    Похожие публикации

    Комментарии 1

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.