Класс QTimeLine
Класс QTimeLine предоставляет временную шкалу для управления анимациями. Подробнее...
| Заголовок: | #include <QTimeLine> |
| qmake: | QT += core |
| С момента: | Qt 4.2 |
| Наследует: | QObject |
Этот класс был представлен в Qt 4.2.
Типы публичного доступа
| Перечисление | 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 перейдет в состояние Запущена и начнёт излучать 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, &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(), которая напрямую устанавливает позицию времени на временной шкале. Хотя она наиболее полезна в состоянии НеЗапущена (например, подключенная к сигналу valueChanged() в QSlider), эту функцию можно вызывать в любое время.
Интерфейс кадров полезен для стандартных виджетов, но QTimeLine может использоваться для управления любым типом анимации. Сердцем QTimeLine является функция valueForTime(), которая генерирует значение между 0 и 1 для заданного времени. Это значение обычно используется для описания шагов анимации, где 0 — первый шаг анимации, а 1 — последний шаг. При запуске QTimeLine генерирует значения между 0 и 1, вызывая valueForTime() и излучая valueChanged(). По умолчанию valueForTime() применяет алгоритм интерполяции для генерации этих значений. Вы можете выбрать набор предопределённых алгоритмов временной шкалы, вызвав setEasingCurve().
Обратите внимание, что по умолчанию QTimeLine использует QEasingCurve::InOutSine, которая обеспечивает значение, медленно возрастающее, затем стабильно и, наконец, медленно. Для пользовательской временной шкалы вы можете переопределить valueForTime(), в этом случае свойство easingCurve QTimeLine игнорируется.
См. также QProgressBar и QProgressDialog.
Документация по типам членов
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().
Документация по свойствам
currentTime : int
Это свойство содержит текущее время временной шкалы.
Когда QTimeLine находится в состоянии Running, это значение непрерывно обновляется в зависимости от длительности и направления временной шкалы. В противном случае это значение, которое было текущим, когда stop() был вызван последний раз, или значение, заданное setCurrentTime().
По умолчанию это свойство содержит значение 0.
Функции доступа:
| int | currentTime() const |
| void | setCurrentTime(int msec) |
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
Указывает кривую сглаживания, которую будет использовать временная шкала. Если valueForTime() переопределен, это значение игнорируется. Если оба easingCurve и curveShape установлены, последнее установленное свойство переопределяет предыдущее.
Это свойство было добавлено в Qt 4.6.
Функции доступа:
| QEasingCurve | easingCurve() const |
| void | setEasingCurve(const QEasingCurve &curve) |
См. также valueForTime().
loopCount : int
Это свойство содержит количество повторений временной шкалы до ее завершения.
Значение 0 для loopCount означает, что временная шкала будет циклически повторяться бесконечно.
По умолчанию это свойство содержит значение 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. Значение по умолчанию для длительности составляет 1000 миллисекунд.
[signal] void QTimeLine::finished()
Этот сигнал излучается, когда QTimeLine завершается (т.е., достигает конца временной шкалы) и не циклически повторяется.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
[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().
[signal] void QTimeLine::stateChanged(QTimeLine::State newState)
Этот сигнал излучается всякий раз, когда состояние QTimeLine меняется. Новое состояние — newState.
Примечание: Это частный сигнал. Его можно использовать в подключениях сигналов, но не может быть излучен пользователем.
[slot] void QTimeLine::stop()
Останавливает шкалу времени, заставляя QTimeLine перейти в состояние NotRunning.
См. также start().
[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] 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.15/qtimeline.html