Класс QTimeLine
Класс QTimeLine предоставляет временную шкалу для управления анимацией. Подробнее...
| Заголовок: | #include <QTimeLine> |
| qmake: | QT += core |
| С момента: | Qt 4.2 |
| Наследует: | QObject |
Этот класс был представлен в Qt 4.2.
Типы
| перечисление | CurveShape { EaseInCurve, EaseOutCurve, EaseInOutCurve, LinearCurve, SineCurve, CosineCurve } |
| перечисление | Direction { Forward, Backward } |
| перечисление | State { NotRunning, Paused, Running } |
Свойства
|
|
Открытые функции
| QTimeLine(int duration = 1000, QObject *parent = nullptr) | |
| virtual | ~QTimeLine() |
| int | currentFrame() const |
| int | currentTime() const |
| qreal | currentValue() const |
| QTimeLine::CurveShape | curveShape() const |
| QTimeLine::Direction | direction() const |
| int | duration() const |
| QEasingCurve | easingCurve() const |
| int | endFrame() const |
| int | frameForTime(int msec) const |
| int | loopCount() const |
| void | setCurveShape(QTimeLine::CurveShape shape) |
| 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, SIGNAL(frameChanged(int)), progressBar, SLOT(setValue(int)));
// Clicking the push button will start the progress bar animation
pushButton = new QPushButton(tr("Start animation"), this);
connect(pushButton, SIGNAL(clicked()), timeLine, SLOT(start()));
... По умолчанию таймлайн выполняется один раз, от начала до конца, после чего необходимо снова вызвать start() для перезапуска с начала. Чтобы зациклить таймлайн, можно вызвать setLoopCount(), передав количество раз, которое таймлайн должен запуститься перед завершением. Направление также можно изменить, заставив таймлайн работать в обратном порядке, вызвав setDirection(). Вы также можете приостановить и возобновить таймлайн во время его работы, вызвав setPaused(). Для интерактивного управления предусмотрена функция setCurrentTime(), которая устанавливает текущую позицию таймлайна напрямую. Хотя она наиболее полезна в состоянии NotRunning (например, подключённая к сигналу valueChanged() в QSlider), эта функция может быть вызвана в любое время.
Интерфейс фрейма полезен для стандартных виджетов, но QTimeLine можно использовать для управления любым типом анимации. Сердцем QTimeLine является функция valueForTime(), которая генерирует значение от 0 до 1 для заданного времени. Это значение обычно используется для описания шагов анимации, где 0 — первый шаг анимации, а 1 — последний шаг. Во время выполнения QTimeLine генерирует значения между 0 и 1, вызывая valueForTime() и испуская valueChanged(). По умолчанию valueForTime() применяет алгоритм интерполяции для генерации этих значений. Вы можете выбрать набор предопределенных алгоритмов таймлайна, вызвав setCurveShape().
Обратите внимание, что по умолчанию QTimeLine использует кривую EaseInOut, которая обеспечивает значение, которое медленно растёт, затем растёт равномерно и, наконец, медленно растёт. Для пользовательского таймлайна вы можете переопределить valueForTime(), в этом случае свойство curveShape QTimeLine игнорируется.
См. также QProgressBar и QProgressDialog.
Документация типов членов
enum QTimeLine::CurveShape
Этот перечисление описывает форму кривой значений QTimeLine по умолчанию. Значение по умолчанию — EaseInOutCurve. Кривая определяет соотношение между значением и таймлайном.
| Константа | Значение | Описание |
|---|---|---|
QTimeLine::EaseInCurve |
0 |
Значение начинает расти медленно, затем скорость увеличивается. |
QTimeLine::EaseOutCurve |
1 |
Значение начинает расти равномерно, затем медленно заканчивается. |
QTimeLine::EaseInOutCurve |
2 |
Значение начинает расти медленно, затем равномерно, затем снова медленно. |
QTimeLine::LinearCurve |
3 |
Значение растёт линейно (например, если продолжительность составляет 1000 мс, значение в момент времени 500 мс равно 0,5). |
QTimeLine::SineCurve |
4 |
Значение растёт синусоидально. |
QTimeLine::CosineCurve |
5 |
Значение растёт косинусоидально. |
См. также setCurveShape().
enum QTimeLine::Direction
Это перечисление описывает направление таймлайна при нахождении в состоянии Running.
| Константа | Значение | Описание |
|---|---|---|
QTimeLine::Forward |
0 |
Текущее время таймлайна увеличивается со временем (т.е. перемещается от 0 к концу/продолжительности). |
QTimeLine::Backward |
1 |
Текущее время таймлайна уменьшается со временем (т.е. перемещается от конца/продолжительности к 0). |
См. также setDirection().
enum QTimeLine::State
Это перечисление описывает состояние таймлайна.
| Константа | Значение | Описание |
|---|---|---|
QTimeLine::NotRunning |
0 |
Таймлайн не выполняется. Это начальное состояние QTimeLine, и состояние QTimeLine возвращается при завершении. Текущее время, кадр и значение остаются неизменными до тех пор, пока либо не будет вызван setCurrentTime(), либо таймлайн не будет запущен вызовом start(). |
QTimeLine::Paused |
1 |
Таймлайн приостановлен (т.е. временно приостановлен). Вызов setPaused(false) возобновит работу таймлайна. |
QTimeLine::Running |
2 |
Таймлайн выполняется. Пока контроль находится в цикле событий, QTimeLine будет обновлять текущее время с регулярными интервалами, испуская valueChanged() и frameChanged() при необходимости. |
См. также state() и stateChanged().
Документация свойств
currentTime : int
Это свойство содержит текущее время временной шкалы.
Когда QTimeLine находится в состоянии «Запуск», это значение непрерывно обновляется в зависимости от длительности и направления временной шкалы. В противном случае это значение, которое было текущим, когда метод stop() был вызван последний раз, или значение, установленное с помощью setCurrentTime().
По умолчанию это свойство содержит значение 0.
Функции доступа:
| int | currentTime() const |
| void | setCurrentTime(int msec) |
curveShape : CurveShape
Это свойство определяет форму кривой временной шкалы.
Форма кривой описывает отношение между временем и значением для базовой реализации метода valueForTime().
Если вы переопределили метод valueForTime(), это значение игнорируется.
По умолчанию это свойство установлено в EaseInOutCurve.
Функции доступа:
| QTimeLine::CurveShape | curveShape() const |
| void | setCurveShape(QTimeLine::CurveShape shape) |
См. также valueForTime().
direction : Direction
Это свойство определяет направление временной шкалы, когда QTimeLine находится в состоянии Running.
Это направление указывает, движется ли время от 0 к длительности временной шкалы или от значения длительности к 0 после вызова start().
По умолчанию это свойство установлено в Forward.
Функции доступа:
| QTimeLine::Direction | direction() const |
| void | setDirection(QTimeLine::Direction direction) |
duration : int
Это свойство хранит общую длительность временной шкалы в миллисекундах.
По умолчанию это значение равно 1000 (т.е. 1 секунда), но вы можете изменить его, передав длительность в конструктор QTimeLine или вызвав setDuration(). Длительность должна быть больше 0.
Примечание: Изменение длительности не приводит к сбросу текущего времени до нуля или к изменению новой длительности. Вам также необходимо вызвать setCurrentTime() с желаемым значением.
Функции доступа:
| int | duration() const |
| void | setDuration(int duration) |
easingCurve : QEasingCurve
Определяет кривую плавного изменения, которую будет использовать временная шкала. Если установлены как кривая плавного изменения, так и curveShape, последнее установленное свойство переопределит предыдущее. (Если переопределён метод valueForTime(), он переопределит оба)
Это свойство было добавлено в Qt 4.6.
Функции доступа:
| QEasingCurve | easingCurve() const |
| void | setEasingCurve(const QEasingCurve &curve) |
loopCount : int
Это свойство содержит количество повторений временной шкалы перед завершением.
Значение 0 означает, что временная шкала будет повторяться бесконечно.
По умолчанию это свойство содержит значение 1.
Функции доступа:
| int | loopCount() const |
| void | setLoopCount(int count) |
updateInterval : int
Это свойство хранит время в миллисекундах между каждым обновлением текущего времени QTimeLine.
При обновлении текущего времени QTimeLine будет испускать сигнал valueChanged(), если текущее значение изменилось, и frameChanged(), если изменился кадр.
По умолчанию интервал составляет 40 мс, что соответствует частоте 25 обновлений в секунду.
Функции доступа:
| int | updateInterval() const |
| void | setUpdateInterval(int interval) |
Документация по членам-функциям
QTimeLine::QTimeLine(int duration = 1000, QObject *parent = nullptr)
Создаёт временную шкалу с длительностью duration миллисекунд. parent передаётся в конструктор QObject. Значение по умолчанию для duration – 1000 миллисекунд.
[signal] void QTimeLine::finished()
Этот сигнал испускается, когда QTimeLine завершается (т.е. достигает конца временной шкалы) и не повторяется.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может испускаться пользователем.
[signal] void QTimeLine::frameChanged(int frame)
QTimeLine испускает этот сигнал с регулярными интервалами при работе в состоянии Running, но только если изменяется текущий кадр. frame – текущий номер кадра.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может испускаться пользователем.
См. также QTimeLine::setFrameRange() и QTimeLine::updateInterval.
[slot] void QTimeLine::resume()
Возобновляет временную шкалу с текущего времени. QTimeLine возвращается в состояние «Запуск», и после входа в цикл событий будет обновлять текущее время, кадр и значение с регулярными интервалами.
В отличие от start(), эта функция не перезапускает временную шкалу перед возобновлением.
См. также start(), updateInterval(), frameChanged() и valueChanged().
[slot] void QTimeLine::setPaused(bool paused)
Если paused равно true, временная шкала приостанавливается, переводя QTimeLine в состояние «Приостановлено». Обновления не будут сигнализироваться до тех пор, пока не будет вызван либо start(), либо setPaused(false). Если paused равно false, временная шкала возобновляется и продолжает работу с того места, где она остановилась.
[slot] void QTimeLine::start()
Запускает временную шкалу. QTimeLine переходит в состояние «Запуск», и после входа в цикл событий будет обновлять текущее время, кадр и значение с регулярными интервалами. Значение по умолчанию интервала составляет 40 мс (т.е. 25 раз в секунду). Вы можете изменить интервал обновления, вызвав setUpdateInterval().
Временная шкала начнётся с позиции 0 или с конца, если направление обратное. Если вам нужно возобновить остановленную временную шкалу без перезапуска, вы можете вызвать resume() вместо этого.
См. также resume(), updateInterval(), frameChanged() и valueChanged().
[signal] void QTimeLine::stateChanged(QTimeLine::State newState)
Этот сигнал испускается всякий раз, когда состояние QTimeLine изменяется. Новое состояние – newState.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может испускаться пользователем.
[slot] void QTimeLine::stop()
Останавливает временную шкалу, переводя QTimeLine в состояние NotRunning.
См. также start().
[slot] void QTimeLine::toggleDirection()
Переключает направление временной шкалы. Если направление было «Вперёд», оно становится «Назад», и наоборот.
См. также setDirection().
[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.
Переопределите эту функцию, чтобы задать пользовательскую форму кривой для вашей временной шкалы.
См. также CurveShape и frameForTime().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qtimeline.html