QTimeLine Class
La clase QTimeLine proporciona una línea de tiempo para controlar las animaciones. Más...
| Cabecera: | #include <QTimeLine> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Hereda: | QObject |
- Lista de todos los miembros, incluyendo los heredados
- QTimeLine es parte de Animation Framework.
Tipos Públicos
Propiedades
|
|
Funciones públicas
| QTimeLine(int duration = 1000, QObject *parent = nullptr) | |
| virtual | ~QTimeLine() |
| QBindable<int> | bindableCurrentTime() |
| QBindable<QTimeLine::Direction> | bindableDirection() |
| QBindable<int> | bindableDuration() |
| QBindable<QEasingCurve> | bindableEasingCurve() |
| QBindable<int> | bindableLoopCount() |
| QBindable<int> | bindableUpdateInterval() |
| 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 |
Ranuras públicas
| void | resume() |
| void | setCurrentTime(int msec) |
| void | setPaused(bool paused) |
| void | start() |
| void | stop() |
| void | toggleDirection() |
Señales
| void | finished() |
| void | frameChanged(int frame) |
| void | stateChanged(QTimeLine::State newState) |
| void | valueChanged(qreal value) |
Funciones protegidas reimplementadas
| virtual void | timerEvent(QTimerEvent *event) override |
Descripción Detallada
Se utiliza más comúnmente para animar un control GUI llamando a una ranura periódicamente. Puedes construir una línea de tiempo pasando su duración en milisegundos al constructor de QTimeLine. La duración de la línea de tiempo describe durante cuánto tiempo se ejecutará la animación. A continuación, establece un rango de fotogramas adecuado llamando a setFrameRange(). Finalmente conecta la señal frameChanged() a una ranura adecuada en el widget que deseas animar (por ejemplo, setValue() en QProgressBar). Cuando procedas a llamar a start(), QTimeLine entrará en estado Ejecutando, y empezará a emitir frameChanged() a intervalos regulares, haciendo que el valor de la propiedad conectada de tu widget crezca desde el extremo inferior al superior y de tu rango de fotogramas, a un ritmo constante. Puedes especificar el intervalo de actualización llamando a setUpdateInterval(). Cuando termina, QTimeLine entra en estado NotRunning, y emite finished().
Ejemplo:
//... auto 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 auto pushButton = new QPushButton(tr("Start animation"), this); connect(pushButton, &QPushButton::clicked, timeLine, &QTimeLine::start); //...
Por defecto, la línea de tiempo se ejecuta una vez, desde su inicio hasta su final, tras lo cual debe llamar a start() de nuevo para reiniciar desde el principio. Para hacer que la línea de tiempo se ejecute en bucle, puede llamar a setLoopCount(), pasando el número de veces que la línea de tiempo debe ejecutarse antes de terminar. También se puede cambiar la dirección, haciendo que la línea de tiempo se ejecute hacia atrás, llamando a setDirection(). También puede pausar y desbloquear la línea de tiempo mientras se está ejecutando llamando a setPaused(). Para el control interactivo, se proporciona la función setCurrentTime(), que establece directamente la posición temporal de la línea de tiempo. Aunque es más útil en el estado NotRunning (por ejemplo, conectado a una señal valueChanged() en un QSlider), esta función puede ser llamada en cualquier momento.
La interfaz de fotogramas es útil para widgets estándar, pero QTimeLine puede utilizarse para controlar cualquier tipo de animación. El corazón de QTimeLine reside en la función valueForTime(), que genera un valor entre 0 y 1 para un tiempo dado. Este valor se utiliza normalmente para describir los pasos de una animación, donde 0 es el primer paso de una animación, y 1 es el último paso. Cuando se ejecuta, QTimeLine genera valores entre 0 y 1 llamando a valueForTime() y emitiendo valueChanged(). Por defecto, valueForTime() aplica un algoritmo de interpolación para generar estos valores. Puede elegir entre un conjunto de algoritmos de línea de tiempo predefinidos llamando a setEasingCurve().
Tenga en cuenta que, por defecto, QTimeLine utiliza QEasingCurve::InOutSine, que proporciona un valor que crece lentamente, luego crece de forma constante y, finalmente, crece lentamente. Para una línea de tiempo personalizada, puedes reimplementar valueForTime(), en cuyo caso se ignora la propiedad easingCurve de QTimeLine.
Ver también QProgressBar y QProgressDialog.
Documentación de tipos de miembros
enum QTimeLine::Direction
Este enum describe la dirección de la línea de tiempo cuando está en estado Running.
| Constante | Valor | Descripción |
|---|---|---|
QTimeLine::Forward | 0 | El tiempo actual de la línea de tiempo aumenta con el tiempo (es decir, se mueve desde 0 y hacia el final / duración). |
QTimeLine::Backward | 1 | El tiempo actual de la línea de tiempo disminuye con el tiempo (es decir, se mueve desde el final / duración y hacia 0). |
Véase también setDirection().
enum QTimeLine::State
Este enum describe el estado de la línea de tiempo.
| Constante | Valor | Descripción |
|---|---|---|
QTimeLine::NotRunning | 0 | La línea de tiempo no se está ejecutando. Este es el estado inicial de QTimeLine, y el estado al que vuelve QTimeLine cuando finaliza. La hora, el fotograma y el valor actuales permanecen inalterados hasta que se llama a setCurrentTime() o se inicia la línea de tiempo llamando a start(). |
QTimeLine::Paused | 1 | La línea de tiempo se pone en pausa (es decir, se suspende temporalmente). Si se llama a setPaused(false), se reanudará la actividad de la línea de tiempo. |
QTimeLine::Running | 2 | La línea de tiempo se está ejecutando. Mientras el control está en el bucle de eventos, QTimeLine actualizará su tiempo actual a intervalos regulares, emitiendo valueChanged() y frameChanged() cuando sea apropiado. |
Ver también state() y stateChanged().
Documentación de propiedades
[bindable] currentTime : int
Nota: Esta propiedad admite los enlaces QProperty.
Esta propiedad contiene la hora actual de la línea de tiempo.
Cuando QTimeLine está en estado de Ejecución, este valor se actualiza continuamente en función de la duración y dirección de la línea de tiempo. En caso contrario, es el valor actual cuando se llamó por última vez a stop(), o el valor establecido por setCurrentTime().
Nota: Puedes enlazar otras propiedades a currentTime, pero no se recomienda establecer enlaces a ella. A medida que la animación progresa, currentTime se actualiza automáticamente, lo que anula sus vinculaciones.
Por defecto, esta propiedad contiene el valor 0.
Funciones de acceso:
| int | currentTime() const |
| void | setCurrentTime(int msec) |
[bindable] direction : Direction
Nota: Esta propiedad soporta enlaces QProperty.
Esta propiedad mantiene la dirección de la línea de tiempo cuando QTimeLine está en estado Running.
Esta dirección indica si el tiempo se mueve desde 0 hacia la duración de la línea de tiempo, o desde el valor de la duración y hacia 0 después de que start() haya sido llamado.
Cualquier vinculación de dirección será eliminada no sólo por setDirection(), sino también por toggleDirection().
Por defecto, esta propiedad se establece en Forward.
Funciones de acceso:
| QTimeLine::Direction | direction() const |
| void | setDirection(QTimeLine::Direction direction) |
[bindable] duration : int
Nota: Esta propiedad es compatible con QProperty.
Esta propiedad contiene la duración total de la línea de tiempo en milisegundos.
Por defecto, este valor es 1000 (es decir, 1 segundo), pero se puede cambiar pasando una duración al constructor de QTimeLine, o llamando a setDuration(). La duración debe ser mayor que 0.
Nota: Cambiar la duración no hace que el tiempo actual se ponga a cero o que se establezca la nueva duración. También es necesario llamar a setCurrentTime() con el valor deseado.
Funciones de acceso:
| int | duration() const |
| void | setDuration(int duration) |
[bindable] easingCurve : QEasingCurve
Nota: Esta propiedad soporta enlaces QProperty.
Especifica la curva de relajación que utilizará la línea de tiempo. Si se reimplementa valueForTime(), este valor se ignora.
Funciones de acceso:
| QEasingCurve | easingCurve() const |
| void | setEasingCurve(const QEasingCurve &curve) |
Véase también valueForTime().
[bindable] loopCount : int
Nota: Esta propiedad soporta QProperty bindings.
Esta propiedad contiene el número de veces que la línea de tiempo debe repetirse antes de terminar.
Una cuenta de bucle de 0 significa que la línea de tiempo se repetirá para siempre.
Por defecto, esta propiedad contiene un valor de 1.
Funciones de acceso:
| int | loopCount() const |
| void | setLoopCount(int count) |
[bindable] updateInterval : int
Nota: Esta propiedad soporta enlaces a QProperty.
Esta propiedad contiene el tiempo en milisegundos entre cada vez que QTimeLine actualiza su hora actual.
Al actualizar la hora actual, QTimeLine emitirá valueChanged() si el valor actual ha cambiado, y frameChanged() si el marco ha cambiado.
Por defecto, el intervalo es de 40 ms, lo que corresponde a un ritmo de 25 actualizaciones por segundo.
Funciones de acceso:
| int | updateInterval() const |
| void | setUpdateInterval(int interval) |
Documentación de las funciones miembro
[explicit] QTimeLine::QTimeLine(int duration = 1000, QObject *parent = nullptr)
Construye una línea de tiempo con una duración de duration milisegundos. parent se pasa al constructor de QObject. La duración por defecto es de 1000 milisegundos.
[virtual noexcept] QTimeLine::~QTimeLine()
Destruye la línea temporal.
int QTimeLine::currentFrame() const
Devuelve el fotograma correspondiente a la hora actual.
Véase también currentTime(), frameForTime() y setFrameRange().
qreal QTimeLine::currentValue() const
Devuelve el valor correspondiente a la hora actual.
Véase también valueForTime() y currentFrame().
int QTimeLine::endFrame() const
Devuelve el fotograma final, que es el fotograma correspondiente al final de la línea de tiempo (es decir, el fotograma para el que el valor actual es 1).
Véase también setEndFrame() y setFrameRange().
[private signal] void QTimeLine::finished()
Esta señal se emite cuando QTimeLine termina (es decir, alcanza el final de su línea de tiempo), y no hace un bucle.
Nota: Se trata de una señal privada. Puede utilizarse en conexiones de señales, pero no puede ser emitida por el usuario.
[private signal] void QTimeLine::frameChanged(int frame)
QTimeLine emite esta señal a intervalos regulares cuando está en estado Running, pero sólo si cambia el fotograma actual. frame es el número de fotograma actual.
Nota: Esta es una señal privada. Puede ser utilizada en conexiones de señal pero no puede ser emitida por el usuario.
Véase también QTimeLine::setFrameRange() y QTimeLine::updateInterval.
int QTimeLine::frameForTime(int msec) const
Devuelve el fotograma correspondiente al tiempo msec. Este valor se calcula utilizando una interpolación lineal del fotograma inicial y final, basada en el valor devuelto por valueForTime().
Véase también valueForTime() y setFrameRange().
[slot] void QTimeLine::resume()
Reanuda la línea de tiempo desde el tiempo actual. QTimeLine volverá a entrar en estado de ejecución, y una vez que entre en el bucle de eventos, actualizará su tiempo actual, fotograma y valor a intervalos regulares.
A diferencia de start(), esta función no reinicia la línea de tiempo antes de reanudarla.
Véase también start(), updateInterval(), frameChanged(), y valueChanged().
void QTimeLine::setEndFrame(int frame)
Establece el fotograma final, que es el fotograma correspondiente al final de la línea de tiempo (es decir, el fotograma para el que el valor actual es 1), en frame.
Véase también endFrame(), startFrame() y setFrameRange().
void QTimeLine::setFrameRange(int startFrame, int endFrame)
Establece el contador de fotogramas de la línea de tiempo para que comience en startFrame, y termine y endFrame. Para cada valor de tiempo, QTimeLine encontrará el fotograma correspondiente cuando llame a currentFrame() o frameForTime() interpolando, utilizando el valor de retorno de valueForTime().
En estado de ejecución, QTimeLine también emite la señal frameChanged() cuando cambia el fotograma.
Véase también startFrame(), endFrame(), start(), y currentFrame().
[slot] void QTimeLine::setPaused(bool paused)
Si paused es verdadero, la línea de tiempo se pausa, causando que QTimeLine entre en estado Pausado. No se señalarán actualizaciones hasta que se llame a start() o a setPaused(false). Si paused es falso, la línea de tiempo se reanuda y continúa donde se quedó.
Véase también state() y start().
void QTimeLine::setStartFrame(int frame)
Establece el fotograma de inicio, que es el fotograma correspondiente al inicio de la línea de tiempo (es decir, el fotograma para el que el valor actual es 0), en frame.
Véase también startFrame(), endFrame() y setFrameRange().
[slot] void QTimeLine::start()
Inicia la línea de tiempo. QTimeLine entrará en estado Ejecutando, y una vez que entre en el bucle de eventos, actualizará su tiempo actual, fotograma y valor a intervalos regulares. El intervalo por defecto es de 40 ms (es decir, 25 veces por segundo). Puede cambiar el intervalo de actualización llamando a setUpdateInterval().
La línea de tiempo comenzará desde la posición 0, o desde el final si se va hacia atrás. Si desea reanudar una línea de tiempo detenida sin reiniciarla, puede llamar a resume() en su lugar.
Véase también resume(), updateInterval(), frameChanged() y valueChanged().
int QTimeLine::startFrame() const
Devuelve el fotograma de inicio, que es el fotograma correspondiente al inicio de la línea de tiempo (es decir, el fotograma para el que el valor actual es 0).
Véase también setStartFrame() y setFrameRange().
QTimeLine::State QTimeLine::state() const
Devuelve el estado de la línea de tiempo.
Véase también start(), setPaused() y stop().
[private signal] void QTimeLine::stateChanged(QTimeLine::State newState)
Esta señal se emite cada vez que cambia el estado de QTimeLine. El nuevo estado es newState.
Nota: Se trata de una señal privada. Puede ser utilizada en conexiones de señales pero no puede ser emitida por el usuario.
[slot] void QTimeLine::stop()
Detiene la línea de tiempo, haciendo que QTimeLine entre en estado NotRunning.
Véase también start().
[override virtual protected] void QTimeLine::timerEvent(QTimerEvent *event)
Reimplementa: QObject::timerEvent(QTimerEvent *event).
[slot] void QTimeLine::toggleDirection()
Cambia la dirección de la línea de tiempo. Si la dirección era Adelante, se convierte en Atrás, y vice verca.
Se eliminan las vinculaciones existentes de direction.
Véase también setDirection().
[private signal] void QTimeLine::valueChanged(qreal value)
QTimeLine emite esta señal a intervalos regulares cuando está en estado Running, pero sólo si cambia el valor actual. value es el valor actual. value es un número entre 0.0 y 1.0
Nota: Se trata de una señal privada. Puede ser utilizada en conexiones de señal pero no puede ser emitida por el usuario.
Véase también QTimeLine::setDuration(), QTimeLine::valueForTime(), y QTimeLine::updateInterval.
[virtual] qreal QTimeLine::valueForTime(int msec) const
Devuelve el valor de la línea de tiempo para el tiempo msec. El valor devuelto, que varía dependiendo de la forma de la curva, está siempre entre 0 y 1. Si msec es 0, la implementación por defecto siempre devuelve 0.
Reimplemente esta función para proporcionar una forma de curva personalizada para su línea de tiempo.
Véase también easingCurve y frameForTime().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.