Класс 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 перейдёт в состояние «Запуск» и начнёт излучать frameChanged() с определённым интервалом, заставляя значение связанного свойства вашего виджета увеличиваться от нижнего до верхнего предела диапазона кадров с постоянной скоростью. Вы можете указать интервал обновления, вызвав setUpdateInterval(). Когда завершение, QTimeLine переходит в состояние НеЗапущен и излучает 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(), которая устанавливает позицию во времени таймлайна напрямую. Хотя наиболее полезна в состоянии НеЗапущен (например, подключенная к сигналу 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.
Функции доступа:
| 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.13/qtimeline.html