Класс QVariantAnimation
Класс QVariantAnimation предоставляет базовый класс для анимаций. Подробнее...
| Заголовок: | #include <QVariantAnimation> |
| qmake: | QT += core |
| С тех пор как: | Qt 4.6 |
| Наследует: | QAbstractAnimation |
| Наследуется от: |
Этот класс был представлен в Qt 4.6.
Типы публичного доступа
| typedef | KeyValue |
| typedef | KeyValues |
Свойства
|
|
Открытые функции
| QVariantAnimation(QObject *parent = nullptr) | |
| virtual | ~QVariantAnimation() |
| QVariant | currentValue() const |
| QEasingCurve | easingCurve() const |
| QVariant | endValue() const |
| QVariant | keyValueAt(qreal step) const |
| QVariantAnimation::KeyValues | keyValues() const |
| void | setDuration(int msecs) |
| void | setEasingCurve(const QEasingCurve &easing) |
| void | setEndValue(const QVariant &value) |
| void | setKeyValueAt(qreal step, const QVariant &value) |
| void | setKeyValues(const QVariantAnimation::KeyValues &keyValues) |
| void | setStartValue(const QVariant &value) |
| QVariant | startValue() const |
Переопределённые открытые функции
| virtual int | duration() const override |
Сигналы
| void | valueChanged(const QVariant &value) |
Защищённые функции
| virtual QVariant | interpolated(const QVariant &from, const QVariant &to, qreal progress) const |
| virtual void | updateCurrentValue(const QVariant &value) |
Переопределённые защищённые функции
| virtual bool | event(QEvent *event) override |
| virtual void | updateCurrentTime(int) override |
| virtual void | updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) override |
Связанные внешние члены
| void | qRegisterAnimationInterpolator(QVariant (*)(const T &, const T &, qreal) func) |
Подробное описание
Этот класс является частью Фреймворка анимации. Он служит базовым классом для анимации свойств и элементов, с функциями для совместного использования функциональности.
Класс выполняет интерполяцию над QVariant значениями, но оставляет использование интерполированных значений своим подклассам. В настоящее время Qt предоставляет QPropertyAnimation, который анимирует Qt свойства. Смотрите описание класса QPropertyAnimation, если вы хотите анимировать такие свойства.
Затем вы можете установить начальное и конечное значения для свойства, вызвав setStartValue() и setEndValue(), и, наконец, вызвать start() для запуска анимации. QVariantAnimation интерполирует свойство целевого объекта и излучает valueChanged(). Для реагирования на изменение текущего значения нужно переопределить виртуальную функцию updateCurrentValue() или подключиться к этому сигналу.
Также возможно установить значения в указанных шагах между начальным и конечным значением. Интерполяция затем коснётся этих точек в указанных шагах. Обратите внимание, что начальные и конечные значения определяются как ключевые значения в 0,0 и 1,0.
Существует два способа повлиять на то, как QVariantAnimation интерполирует значения. Вы можете установить кривую сглаживания, вызвав setEasingCurve(), и настроить продолжительность, вызвав setDuration(). Вы можете изменить способ интерполяции QVariant значений, создав подкласс QVariantAnimation и переопределив виртуальную функцию interpolated().
Наследование от QVariantAnimation может быть альтернативой, если у вас есть QVariant значения, которые вы не хотите объявлять как свойства Qt. Однако, в большинстве случаев, вы будете лучше объявлять ваши QVariant как свойства.
Не все типы QVariant поддерживаются. Ниже приведен список поддерживаемых типов QVariant:
Если вам нужно интерполировать другие типы переменных, включая пользовательские типы, вы должны реализовать интерполяцию для них сами. Для этого вы можете зарегистрировать функцию-интерполятора для данного типа. Эта функция принимает 3 параметра: начальное значение, конечное значение и текущий прогресс.
Пример:
QVariant myColorInterpolator(const QColor &start, const QColor &end, qreal progress)
{
...
return QColor(...);
}
...
qRegisterAnimationInterpolator<QColor>(myColorInterpolator); Другой вариант — переопределить interpolated(), которая возвращает значения интерполяции для интерполируемого значения.
См. также QPropertyAnimation, QAbstractAnimation и Фреймворк анимации.
Документация по типам членов
typedef QVariantAnimation::KeyValue
Это псевдоним для QPair<qreal, QVariant>.
typedef QVariantAnimation::KeyValues
Это псевдоним для QVector<KeyValue>
Документация свойств
currentValue : const QVariant
Это свойство содержит текущее значение анимации.
Это свойство описывает текущее значение; интерполированное значение между начальным значением start value и конечным значением end value, используя текущее время для прогресса. Само значение получено из interpolated(), которое вызывается многократно во время работы анимации.
QVariantAnimation вызывает виртуальную функцию updateCurrentValue() при изменении текущего значения. Это особенно полезно для подклассов, которым необходимо отслеживать обновления. Например, QPropertyAnimation использует эту функцию для анимации свойств Qt properties.
Функции доступа:
| QVariant | currentValue() const |
Сигнал уведомления:
| void | valueChanged(const QVariant &value) |
См. также startValue и endValue.
duration : int
Это свойство содержит длительность анимации
Это свойство описывает длительность анимации в миллисекундах. По умолчанию длительность составляет 250 миллисекунд.
Функции доступа:
| virtual int | duration() const override |
| void | setDuration(int msecs) |
См. также QAbstractAnimation::duration().
easingCurve : QEasingCurve
Это свойство содержит кривую сглаживания анимации
Это свойство определяет кривую сглаживания анимации. По умолчанию используется линейная кривая сглаживания, что приводит к линейной интерполяции. Предоставлены другие кривые, например, QEasingCurve::InCirc, которая обеспечивает кривую вхождения по окружности. Другой пример - QEasingCurve::InOutElastic, который обеспечивает упругий эффект для значений интерполированного значения.
QVariantAnimation будет использовать QEasingCurve::valueForProgress() для преобразования «нормализованного прогресса» (currentTime / totalDuration) анимации в эффективный прогресс, фактически используемый анимацией. Именно этот эффективный прогресс будет прогрессом при вызове interpolated(). Кроме того, шаги в keyValues относятся к этому эффективному прогрессу.
Кривая сглаживания используется с интерполятором, виртуальной функцией interpolated() и длительностью анимации, чтобы управлять тем, как текущее значение изменяется по мере выполнения анимации.
Функции доступа:
| QEasingCurve | easingCurve() const |
| void | setEasingCurve(const QEasingCurve &easing) |
endValue : QVariant
Это свойство содержит конечное значение анимации
Это свойство описывает конечное значение анимации.
Функции доступа:
| QVariant | endValue() const |
| void | setEndValue(const QVariant &value) |
См. также startValue.
startValue : QVariant
Это свойство содержит необязательное начальное значение анимации
Это свойство описывает необязательное начальное значение анимации. Если оно опущено или если в качестве начального значения присвоено null QVariant, анимация будет использовать текущее положение конца при запуске анимации.
Функции доступа:
| QVariant | startValue() const |
| void | setStartValue(const QVariant &value) |
См. также endValue.
Документация функций-членов
QVariantAnimation::QVariantAnimation(QObject *parent = nullptr)
Создает объект QVariantAnimation. parent передаётся в конструктор QAbstractAnimation.
void QVariantAnimation::valueChanged(const QVariant &value)
QVariantAnimation излучает этот сигнал всякий раз, когда изменяется текущее значение value.
Примечание: Сигнал уведомления для свойства currentValue.
См. также currentValue, startValue и endValue.
QVariantAnimation::~QVariantAnimation()
Уничтожает анимацию.
bool QVariantAnimation::event(QEvent *event)
Переопределяет: QAbstractAnimation::event(QEvent *event).
QVariant QVariantAnimation::interpolated(const QVariant &from, const QVariant &to, qreal progress) const
Эта виртуальная функция возвращает линейную интерполяцию между значениями from и to при progress, обычно значение от 0 до 1. Вы можете переопределить эту функцию в подклассе QVariantAnimation, чтобы реализовать свой алгоритм интерполяции.
Обратите внимание, что для работы интерполяции с QEasingCurve, возвращающей значение меньше 0 или больше 1 (например, QEasingCurve::InBack), необходимо убедиться, что она может экстраполировать. Если семантика типа данных не допускает экстраполяции, функция должна обработать это должным образом.
Вы должны вызвать реализацию QVariantAnimation этой функции, если хотите, чтобы ваш класс обрабатывал типы, уже поддерживаемые Qt (см. описание класса QVariantAnimation для списка поддерживаемых типов).
См. также QEasingCurve.
QVariant QVariantAnimation::keyValueAt(qreal step) const
Возвращает значение ключевой кадра для заданного step. Заданное step должно быть в диапазоне от 0 до 1. Если для step нет KeyValue, возвращается недопустимый QVariant.
См. также keyValues() и setKeyValueAt().
QVariantAnimation::KeyValues QVariantAnimation::keyValues() const
Возвращает ключевые кадры этой анимации.
См. также keyValueAt() и setKeyValues().
void QVariantAnimation::setKeyValueAt(qreal step, const QVariant &value)
Создаёт ключевой кадр в заданном step со значением value. Заданное step должно быть в диапазоне от 0 до 1.
См. также setKeyValues() и keyValueAt().
void QVariantAnimation::setKeyValues(const QVariantAnimation::KeyValues &keyValues)
Заменяет текущий набор ключевых кадров заданными keyValues. Шаг ключевых кадров должен быть в диапазоне от 0 до 1.
См. также keyValues() и keyValueAt().
void QVariantAnimation::updateCurrentTime(int)
Переопределяет: QAbstractAnimation::updateCurrentTime(int currentTime).
void QVariantAnimation::updateCurrentValue(const QVariant &value)
Эта виртуальная функция вызывается каждый раз, когда изменяется текущее значение анимации. Аргумент value — это новое текущее значение.
Реализация базового класса ничего не делает.
См. также currentValue.
[override virtual protected] void QVariantAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
Переопределяет: QAbstractAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState).
Связанные нечлены
void QVariantAnimation::qRegisterAnimationInterpolator(QVariant (*)(const T &, const T &, qreal) func)
Регистрирует пользовательский интерполятор func для шаблонового типа T. Интерполятор должен быть зарегистрирован перед созданием анимации. Чтобы отменить регистрацию (и использовать стандартный интерполятор), установите func в nullptr.
Примечание: Эта функция безопасна для потоков.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qvariantanimation.html