Класс QTimeLine
Класс QTimeLine предоставляет временную шкалу для управления анимациями. Подробнее...
| Заголовок: | #include <QTimeLine> |
| qmake: | QT += core |
| С момента: | Qt 4.2 |
| Наследует: | QObject |
Типы общедоступные
| перечисление | CurveShape { EaseInCurve, EaseOutCurve, EaseInOutCurve, LinearCurve, SineCurve, CosineCurve } |
| перечисление | Direction { Forward, Backward } |
| перечисление | State { NotRunning, Paused, Running } |
Свойства
|
|
- 1 свойство унаследовано от QObject
Общедоступные функции
| QTimeLine(int duration = 1000, QObject *parent = Q_NULLPTR) | |
| virtual | ~QTimeLine() |
| int | currentFrame() const |
| int | currentTime() const |
| qreal | currentValue() const |
| CurveShape | curveShape() const |
| Direction | direction() const |
| int | duration() const |
| QEasingCurve | easingCurve() const |
| int | endFrame() const |
| int | frameForTime(int msec) const |
| int | loopCount() const |
| void | setCurveShape(CurveShape shape) |
| void | setDirection(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 |
| State | state() const |
| int | updateInterval() const |
| virtual qreal | valueForTime(int msec) const |
- 31 общедоступная функция унаследована от QObject
Общедоступные слоты
| void | resume() |
| void | setCurrentTime(int msec) |
| void | setPaused(bool paused) |
| void | start() |
| void | stop() |
| void | toggleDirection() |
- 1 общедоступный слот унаследован от QObject
Сигналы
| void | finished() |
| void | frameChanged(int frame) |
| void | stateChanged(QTimeLine::State newState) |
| void | valueChanged(qreal value) |
- 2 сигнала унаследованы от QObject
Переопределенные защищенные функции
| virtual void | timerEvent(QTimerEvent *event) |
- 9 защищенных функций унаследованы от QObject
Дополнительные унаследованные члены
- 11 статических общедоступных членов унаследованы от QObject
- 9 защищенных функций унаследованы от QObject
Подробное описание
Класс QTimeLine предоставляет временную шкалу для управления анимациями.
Он чаще всего используется для анимации элемента пользовательского интерфейса, вызывая слот периодически. Вы можете создать временную шкалу, передав продолжительность в миллисекундах в конструктор 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(), в этом случае свойство QTimeLine's curveShape игнорируется.
См. также 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, и таймлайн возвращается в это состояние после завершения. Текущее время, кадр и значение остаются неизменными до тех пор, пока не будет вызвано setCurrentTime() или таймлайн не запущен вызовом start(). |
QTimeLine::Paused |
1 |
Таймлайн приостановлен (т.е. временно приостановлен). Вызов setPaused(false) возобновит работу таймлайна. |
QTimeLine::Running |
2 |
Таймлайн работает. В цикле событий QTimeLine будет обновлять текущее время с регулярными интервалами, испуская valueChanged() и frameChanged() при необходимости. |
См. также state() и stateChanged().
END_OF_DOCUMENT_MARKERДокументация свойств
currentTime : int
Это свойство хранит текущее время шкалы времени.
Когда QTimeLine находится в состоянии выполнения, это значение обновляется непрерывно в зависимости от продолжительности и направления шкалы времени. В противном случае, это значение, которое было текущим, когда stop() был вызван в последний раз, или значение, установленное с помощью setCurrentTime().
По умолчанию это свойство содержит значение 0.
Функции доступа:
| int | currentTime() const |
| void | setCurrentTime(int msec) |
curveShape : CurveShape
Это свойство хранит форму кривой шкалы времени.
Форма кривой описывает зависимость между временем и значением для базовой реализации valueForTime().
Если вы переопределили valueForTime(), это значение игнорируется.
По умолчанию это свойство установлено в EaseInOutCurve.
Функции доступа:
| CurveShape | curveShape() const |
| void | setCurveShape(CurveShape shape) |
См. также valueForTime().
direction : Direction
Это свойство хранит направление шкалы времени, когда QTimeLine находится в состоянии Running.
Это направление указывает, движется ли время от 0 к продолжительности шкалы времени или от значения продолжительности к 0 после вызова start().
По умолчанию это свойство установлено в Forward.
Функции доступа:
| Direction | direction() const |
| void | setDirection(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 = Q_NULLPTR)
Конструирует шкалу времени с продолжительностью duration миллисекунд. parent передаётся конструктору QObject. Значение по умолчанию для продолжительности составляет 1000 миллисекунд.
[virtual] QTimeLine::~QTimeLine()
Удаляет шкалу времени.
int QTimeLine::currentFrame() const
Возвращает кадр, соответствующий текущему времени.
См. также currentTime(), frameForTime() и setFrameRange().
qreal QTimeLine::currentValue() const
Возвращает значение, соответствующее текущему времени.
См. также valueForTime() и currentFrame().
int QTimeLine::endFrame() const
Возвращает конечный кадр, который соответствует концу шкалы времени (т.е. кадру, для которого текущее значение равно 1).
См. также setEndFrame() и setFrameRange().
[signal] void QTimeLine::finished()
Этот сигнал излучается, когда QTimeLine завершается (т.е. достигает конца шкалы времени) и не циклится.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
[signal] void QTimeLine::frameChanged(int frame)
QTimeLine излучает этот сигнал с регулярными интервалами, когда находится в состоянии Running, но только если текущий кадр меняется. frame — текущий номер кадра.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
См. также QTimeLine::setFrameRange() и QTimeLine::updateInterval.
int QTimeLine::frameForTime(int msec) const
Возвращает кадр, соответствующий времени msec. Это значение вычисляется с помощью линейной интерполяции начального и конечного кадров, основанной на значении, возвращаемом valueForTime().
См. также valueForTime() и setFrameRange().
[slot] void QTimeLine::resume()
Возобновляет шкалу времени с текущего времени. QTimeLine вернётся в состояние выполнения, и как только он войдёт в цикл обработки событий, он будет обновлять своё текущее время, кадр и значение с регулярными интервалами.
В отличие от start(), эта функция не перезапускает шкалу времени перед возобновлением.
См. также start(), updateInterval(), frameChanged() и valueChanged().
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().
[slot] void QTimeLine::setPaused(bool paused)
Если paused имеет значение true, временная шкала приостанавливается, заставляя QTimeLine перейти в состояние Paused. Обновления не будут сигнализироваться, пока не будет вызван либо start(), либо setPaused(false). Если paused имеет значение false, временная шкала возобновляется и продолжает работу с того места, на котором остановилась.
void QTimeLine::setStartFrame(int frame)
Устанавливает начальный кадр, который соответствует началу временной шкалы (т.е., кадр, для которого текущее значение равно 0), на значение frame.
См. также startFrame(), endFrame() и setFrameRange().
[slot] void QTimeLine::start()
Запускает временную шкалу. QTimeLine перейдет в состояние Running, и как только она войдет в цикл событий, будет обновлять текущее время, кадр и значение с регулярными интервалами. Значение по умолчанию — 40 мс (т.е., 25 раз в секунду). Вы можете изменить интервал обновления, вызвав setUpdateInterval().
Временная шкала начнётся с позиции 0 или с конца, если направление движения — назад. Если нужно возобновить остановленную временную шкалу без перезапуска, можно вызвать resume() вместо этого.
См. также resume(), updateInterval(), frameChanged() и valueChanged().
int QTimeLine::startFrame() const
Возвращает начальный кадр, который соответствует началу временной шкалы (т.е., кадр, для которого текущее значение равно 0).
См. также setStartFrame() и setFrameRange().
State QTimeLine::state() const
Возвращает состояние временной шкалы.
См. также start(), setPaused() и stop().
[signal] void QTimeLine::stateChanged(QTimeLine::State newState)
Этот сигнал испускается всякий раз, когда состояние QTimeLine изменяется. Новое состояние — newState.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может быть испущен пользователем.
[slot] void QTimeLine::stop()
Останавливает временную шкалу, заставляя QTimeLine перейти в состояние NotRunning.
См. также start().
[virtual protected] void QTimeLine::timerEvent(QTimerEvent *event)
Переопределено из QObject::timerEvent().
[slot] void QTimeLine::toggleDirection()
Переключает направление временной шкалы. Если направление было Forward, оно становится Backward, и наоборот.
См. также setDirection().
[signal] void QTimeLine::valueChanged(qreal value)
QTimeLine испускает этот сигнал с регулярными интервалами, когда находится в состоянии Running, но только если текущее значение меняется. value — текущее значение. value — число от 0,0 до 1,0.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может быть испущен пользователем.
См. также QTimeLine::setDuration(), QTimeLine::valueForTime() и QTimeLine::updateInterval.
[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/archives/qt-5.6/qtimeline.html