Класс QTimeLine
Класс QTimeLine предоставляет временную шкалу для управления анимациями. Подробнее...
| Заголовок: | #include <QTimeLine> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследуется от: | QObject |
Типы
| Перечисление | Direction { Вперед, Назад } |
| Перечисление | State { НеЗапущено, Приостановлено, Запущено } |
Свойства
|
|
Открытые функции
| QTimeLine(int duration = 1000, QObject *parent = nullptr) | |
| virtual | ~QTimeLine() |
| int | currentFrame() const |
| int | currentTime() const |
| qreal | currentValue() const |
| QTimeLine::Direction | direction() const |
| int | duration() const |
| QEasingCurve | easingCurve() const |
| int | endFrame() const |
| int | frameForTime(int msec) const |
| int | loopCount() const |
| void | setDirection(QTimeLine::Direction direction) |
| void | setDuration(int duration) |
| void | setEasingCurve(const QEasingCurve &curve) |
| void | setEndFrame(int frame) |
| void | setFrameRange(int startFrame, int endFrame) |
| void | setLoopCount(int count) |
| void | setStartFrame(int frame) |
| void | setUpdateInterval(int interval) |
| int | startFrame() const |
| QTimeLine::State | state() const |
| int | updateInterval() const |
| virtual qreal | valueForTime(int msec) const |
Открытые слоты
| void | resume() |
| void | setCurrentTime(int msec) |
| void | setPaused(bool paused) |
| void | start() |
| void | stop() |
| void | toggleDirection() |
Сигналы
| void | finished() |
| void | frameChanged(int frame) |
| void | stateChanged(QTimeLine::State newState) |
| void | valueChanged(qreal value) |
Переопределенные защищенные функции
| virtual void | timerEvent(QTimerEvent *event) override |
Подробное описание
Чаще всего используется для анимации элемента графического интерфейса, вызывая слот периодически. Вы можете создать таймлайн, передав его длительность в миллисекундах в конструктор QTimeLine. Длительность таймлайна определяет, как долго будет выполняться анимация. Затем вы устанавливаете подходящий диапазон кадров, вызывая setFrameRange(). Наконец, подключите сигнал frameChanged() к подходящему слоту в виджете, который вы хотите анимировать (например, setValue() в QProgressBar). Когда вы вызовете start(), QTimeLine перейдет в состояние Running и начнет излучать frameChanged() с регулярными интервалами, заставляя значение подключенного свойства вашего виджета расти от нижней границы до верхней границы диапазона кадров с постоянной скоростью. Вы можете указать интервал обновления, вызвав setUpdateInterval(). По окончании QTimeLine переходит в состояние NotRunning и излучает finished().
Пример:
...
progressBar = new QProgressBar(this);
progressBar->setRange(0, 100);
// Construct a 1-second timeline with a frame range of 0 - 100
QTimeLine *timeLine = new QTimeLine(1000, this);
timeLine->setFrameRange(0, 100);
connect(timeLine, &QTimeLine::frameChanged, progressBar, &QProgressBar::setValue);
// Clicking the push button will start the progress bar animation
pushButton = new QPushButton(tr("Start animation"), this);
connect(pushButton, &QPushButton::clicked, timeLine, &QTimeLine::start);
... По умолчанию таймлайн выполняется один раз, от начала до конца, после чего необходимо снова вызвать start() для перезапуска с начала. Чтобы зациклить таймлайн, можно вызвать setLoopCount(), передав количество раз, которое таймлайн должен выполняться перед завершением. Направление также можно изменить, заставив таймлайн выполняться в обратном направлении, вызвав setDirection(). Вы также можете приостановить и возобновить таймлайн во время его выполнения, вызвав setPaused(). Для интерактивного управления предоставляется функция setCurrentTime(), которая устанавливает позицию времени таймлайна напрямую. Хотя она наиболее полезна в состоянии NotRunning (например, подключена к сигналу valueChanged() в QSlider), эту функцию можно вызвать в любое время.
Интерфейс кадров полезен для стандартных виджетов, но QTimeLine можно использовать для управления любым типом анимации. Сердцевина QTimeLine заключается в функции valueForTime(), которая генерирует значение от 0 до 1 для заданного времени. Это значение обычно используется для описания этапов анимации, где 0 — первый этап анимации, а 1 — последний этап. Во время выполнения QTimeLine генерирует значения между 0 и 1, вызывая valueForTime() и излучая valueChanged(). По умолчанию valueForTime() применяет алгоритм интерполяции для генерации этих значений. Вы можете выбрать набор предопределенных алгоритмов таймлайна, вызвав setEasingCurve().
Обратите внимание, что по умолчанию QTimeLine использует QEasingCurve::InOutSine, которая обеспечивает значение, медленно увеличивающееся, затем увеличивающееся равномерно и, наконец, медленно увеличивающееся. Для пользовательской временной шкалы вы можете переопределить valueForTime(), в этом случае свойство easingCurve QTimeLine игнорируется.
См. также QProgressBar и QProgressDialog.
Документация по типам членов
перечисление QTimeLine::Direction
Это перечисление описывает направление временной шкалы, когда она находится в состоянии Running.
| Константа | Значение | Описание |
|---|---|---|
QTimeLine::Forward |
0 |
Текущее время временной шкалы увеличивается со временем (т.е. перемещается от 0 к концу/длительности). |
QTimeLine::Backward |
1 |
Текущее время временной шкалы уменьшается со временем (т.е. перемещается от конца/длительности к 0). |
См. также setDirection().
перечисление QTimeLine::State
Это перечисление описывает состояние временной шкалы.
| Константа | Значение | Описание |
|---|---|---|
QTimeLine::NotRunning |
0 |
Временная шкала не запущена. Это начальное состояние QTimeLine, и временная шкала возвращается в это состояние после завершения. Текущее время, кадр и значение остаются неизменными до тех пор, пока не будет вызван setCurrentTime() или временная шкала не будет запущена вызовом start(). |
QTimeLine::Paused |
1 |
Временная шкала приостановлена (т.е. временно приостановлена). Вызов setPaused(false) возобновит работу временной шкалы. |
QTimeLine::Running |
2 |
Временная шкала запущена. Пока управление находится в цикле событий, QTimeLine будет обновлять текущее время с регулярными интервалами, излучая valueChanged() и frameChanged(), когда это необходимо. |
См. также state() и stateChanged().
Документация по свойствам
[bindable] currentTime : int
Примечание: Это свойство поддерживает QProperty привязки.
Это свойство содержит текущее время временной шкалы.
Когда QTimeLine находится в состоянии Running, это значение непрерывно обновляется как функция от длительности и направления временной шкалы. В противном случае это значение, которое было текущим, когда stop() был вызван в последний раз, или значение, заданное setCurrentTime().
Примечание: Вы можете привязать другие свойства к currentTime, но не рекомендуется устанавливать привязки к нему. По мере прохождения анимации currentTime обновляется автоматически, что отменяет его привязки.
По умолчанию это свойство содержит значение 0.
[bindable] direction : Direction
Примечание: Это свойство поддерживает QProperty привязки.
Это свойство содержит направление временной шкалы, когда QTimeLine находится в состоянии Running.
Это направление указывает, перемещается ли время от 0 к длительности временной шкалы или от значения длительности к 0 после вызова start().
Любая привязка к направлению будет удалена не только setDirection(), но и toggleDirection().
По умолчанию это свойство установлено в Forward.
[bindable] duration : int
Примечание: Это свойство поддерживает QProperty привязки.
Это свойство содержит общую длительность временной шкалы в миллисекундах.
По умолчанию это значение равно 1000 (т.е. 1 секунда), но вы можете изменить его, передав длительность в конструктор QTimeLine или вызвав setDuration(). Длительность должна быть больше 0.
Примечание: Изменение длительности не приводит к сбросу текущего времени до нуля или к новой длительности. Вам также необходимо вызвать setCurrentTime() с желаемым значением.
[bindable] easingCurve : QEasingCurve
Примечание: Это свойство поддерживает QProperty привязки.
Указывает кривую плавного изменения, которую будет использовать временная шкала. Если valueForTime() переопределен, это значение игнорируется.
См. также valueForTime().
[bindable] loopCount : int
Примечание: Это свойство поддерживает QProperty привязки.
Это свойство содержит количество раз, которое временная шкала должна циклически повторяться, прежде чем она завершится.
Значение 0 для loopCount означает, что временная шкала будет циклически повторяться бесконечно.
По умолчанию это свойство содержит значение 1.
[bindable] updateInterval : int
Примечание: Это свойство поддерживает QProperty привязки.
Это свойство содержит время в миллисекундах между каждым обновлением текущего времени QTimeLine.
При обновлении текущего времени QTimeLine излучит valueChanged(), если текущее значение изменилось, и frameChanged(), если изменился кадр.
По умолчанию интервал составляет 40 мс, что соответствует частоте 25 обновлений в секунду.
Документация по членам-функциям
QTimeLine::QTimeLine(int duration = 1000, QObject *parent = nullptr)
Создаёт временную шкалу с длительностью duration миллисекунд. parent передаётся в конструктор QObject. По умолчанию длительность составляет 1000 миллисекунд.
[private signal] void QTimeLine::finished()
Этот сигнал излучается, когда QTimeLine завершается (т.е. достигает конца своей временной шкалы) и не циклически повторяется.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
[private signal] void QTimeLine::frameChanged(int frame)
QTimeLine излучает этот сигнал с регулярными интервалами, когда находится в состоянии Running, но только если текущий кадр меняется. frame — текущий номер кадра.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
См. также QTimeLine::setFrameRange() и QTimeLine::updateInterval.
[slot] void QTimeLine::resume()
Возобновляет временную шкалу с текущего времени. QTimeLine переходит в состояние Running, и, как только оно входит в цикл событий, оно обновляет текущее время, кадр и значение с регулярными интервалами.
В отличие от start(), эта функция не перезапускает временную шкалу перед возобновлением.
См. также start(), updateInterval(), frameChanged() и valueChanged().
[slot] void QTimeLine::setPaused(bool paused)
Если paused равно true, временная шкала приостанавливается, вызывая переход QTimeLine в состояние Paused. Обновления не будут сигнализироваться до тех пор, пока не будет вызван start() или setPaused(false). Если paused равно false, временная шкала возобновляется и продолжает работу с того места, где она остановилась.
[slot] void QTimeLine::start()
Запускает временную шкалу. QTimeLine переходит в состояние Running, и, как только она входит в цикл событий, она обновляет текущее время, кадр и значение с регулярными интервалами. По умолчанию интервал составляет 40 мс (т.е. 25 раз в секунду). Вы можете изменить интервал обновления, вызвав setUpdateInterval().
Временная шкала начнется с позиции 0 или с конца, если направление обратное. Если вы хотите возобновить остановленную временную шкалу без перезапуска, вы можете вызвать resume() вместо этого.
См. также resume(), updateInterval(), frameChanged() и valueChanged().
[private signal] void QTimeLine::stateChanged(QTimeLine::State newState)
Этот сигнал излучается всякий раз, когда состояние QTimeLine меняется. Новое состояние равно newState.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
[slot] void QTimeLine::stop()
Останавливает временную шкалу, переведя QTimeLine в состояние NotRunning.
См. также start().
END_OF_DOCUMENT_MARKER
[slot] void QTimeLine::toggleDirection()
Переключает направление таймлайна. Если направление было Вперёд, оно становится Назад, и наоборот.
Существующие привязки свойства direction удаляются.
См. также setDirection().
[private signal] void QTimeLine::valueChanged(qreal value)
QTimeLine испускает этот сигнал через равные промежутки времени, когда находится в состоянии Running, но только если текущее значение изменяется. value — текущее значение. value — число от 0.0 до 1.0
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может испускаться пользователем.
См. также QTimeLine::setDuration(), QTimeLine::valueForTime() и QTimeLine::updateInterval.
[virtual] QTimeLine::~QTimeLine()
Уничтожает таймлайн.
int QTimeLine::currentFrame() const
Возвращает кадр, соответствующий текущему времени.
См. также currentTime(), frameForTime() и setFrameRange().
qreal QTimeLine::currentValue() const
Возвращает значение, соответствующее текущему времени.
См. также valueForTime() и currentFrame().
int QTimeLine::endFrame() const
Возвращает конечный кадр, который соответствует концу таймлайна (т.е., кадру, для которого текущее значение равно 1).
См. также setEndFrame() и setFrameRange().
int QTimeLine::frameForTime(int msec) const
Возвращает кадр, соответствующий времени msec. Это значение вычисляется с помощью линейной интерполяции начального и конечного кадров, основанной на значении, возвращаемом valueForTime().
См. также valueForTime() и setFrameRange().
void QTimeLine::setEndFrame(int frame)
Устанавливает конечный кадр, который соответствует концу таймлайна (т.е., кадру, для которого текущее значение равно 1), в frame.
См. также endFrame(), startFrame() и setFrameRange().
void QTimeLine::setFrameRange(int startFrame, int endFrame)
Устанавливает счётчик кадров таймлайна, начиная с startFrame и заканчивая endFrame. Для каждого значения времени QTimeLine найдёт соответствующий кадр при вызове currentFrame() или frameForTime() путём интерполяции, используя возвращаемое значение valueForTime().
Когда находится в состоянии Running, QTimeLine также испускает сигнал frameChanged() при изменении кадра.
См. также startFrame(), endFrame(), start() и currentFrame().
void QTimeLine::setStartFrame(int frame)
Устанавливает начальный кадр, который соответствует началу таймлайна (т.е., кадру, для которого текущее значение равно 0), в frame.
См. также startFrame(), endFrame() и setFrameRange().
int QTimeLine::startFrame() const
Возвращает начальный кадр, который соответствует началу таймлайна (т.е., кадру, для которого текущее значение равно 0).
См. также setStartFrame() и setFrameRange().
QTimeLine::State QTimeLine::state() const
Возвращает состояние таймлайна.
См. также start(), setPaused() и stop().
[override virtual protected] void QTimeLine::timerEvent(QTimerEvent *event)
Переопределяет: QObject::timerEvent(QTimerEvent *event).
[virtual] qreal QTimeLine::valueForTime(int msec) const
Возвращает значение таймлайна для времени msec. Возвращаемое значение, зависящее от формы кривой, всегда находится в диапазоне от 0 до 1. Если msec равно 0, реализация по умолчанию всегда возвращает 0.
Переопределите эту функцию, чтобы задать пользовательскую форму кривой для вашего таймлайна.
См. также easingCurve и frameForTime().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtimeline.html