Класс QVariantAnimation
Класс QVariantAnimation предоставляет базовый класс для анимаций. Подробнее...
| Заголовок: | #include <QVariantAnimation> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследует: | QAbstractAnimation |
| Наследует: |
Типы публичного доступа
| KeyValue | |
| 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, и фреймворк анимации.
Документация по типам членов
QVariantAnimation::KeyValue
Это typedef для QPair<qreal, QVariant>.
QVariantAnimation::KeyValues
Это typedef для QList<KeyValue>
Документация по свойству
[read-only] currentValue : const QVariant
Это свойство содержит текущее значение анимации.
Это свойство описывает текущее значение; интерполированное значение между начальным значением и конечным значением, используя текущее время для прогресса. Само значение получается из 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.
[signal] void QVariantAnimation::valueChanged(const QVariant &value)
QVariantAnimation испускает этот сигнал всякий раз, когда меняется текущее value.
Примечание: Сигнал уведомления для свойства currentValue.
См. также currentValue, startValue и endValue.
[virtual] QVariantAnimation::~QVariantAnimation()
Уничтожает анимацию.
[override virtual protected] bool QVariantAnimation::event(QEvent *event)
Переопределяет: QAbstractAnimation::event(QEvent *event).
[virtual protected] 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().
[override virtual protected] void QVariantAnimation::updateCurrentTime(int)
Переопределяет: QAbstractAnimation::updateCurrentTime(int currentTime).
[virtual protected] 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).
Связанные нечлены
template <typename T> void 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-6.0/qvariantanimation.html