FrameAnimation QML Type
Activa un manejador en cada actualización de fotograma de animación. Más...
| Import Statement: | import QtQuick |
| Since: | Qt 6.4 |
Propiedades
- currentFrame : int
- elapsedTime : real
- frameTime : real
- paused : bool
- running : bool
- smoothFrameTime : real
Señales
Métodos
Descripción detallada
Un FrameAnimation puede ser usado para disparar una acción cada vez que la animación ha progresado y un cuadro de animación ha sido renderizado. Consulta la documentación sobre el Gráfico de Escena para obtener información detallada sobre los bucles de renderización básicos y enhebrados.
Para animaciones generales, prefiera usar NumberAnimation y otros elementos de Animation ya que estos proveen una manera declarativa de describir las animaciones.
FrameAnimation por otro lado debe ser usado para animaciones imperativas personalizadas y en casos de uso como estos:
- Cuando necesitas ejecutar algún código en cada actualización de cuadro. O, por ejemplo, cada dos fotogramas, tal vez utilizando el renderizado progresivo.
- Cuando la velocidad / objetivo está cambiando durante la animación, las animaciones QML normales pueden ser demasiado limitantes.
- Cuando se necesita un tiempo de actualización de fotogramas más preciso, por ejemplo, para el contador de fps.
Comparado con Timer que permite establecer el tiempo de interval, FrameAnimation se ejecuta siempre en sincronización con las actualizaciones de la animación. Si ha utilizado Timer con un intervalo corto para animaciones personalizadas como las de abajo, por favor considere cambiar a utilizar FrameAnimation en su lugar para obtener animaciones más suaves.
// BAD Timer { interval: 16 repeat: true running: true onTriggered: { // Animate something } } // GOOD FrameAnimation { running: true onTriggered: { // Animate something } }
Documentación de Propiedades
currentFrame : int [read-only]
Esta propiedad contiene el número de actualizaciones de fotogramas desde el inicio. Cuando la animación de fotogramas se reinicia, currentFrame comienza desde 0.
El siguiente ejemplo muestra como reaccionar a las actualizaciones de frame.
FrameAnimation { running: true onTriggered: { // Run code on every frame update. } }
Esta propiedad también puede ser usada para renderizar sólo cada n-ésimo frame. Considera un uso avanzado donde la UI contiene dos elementos pesados y para alcanzar una tasa de frames de 60fps, decides renderizar estos elementos pesados a 30fps, el primero en cada frame par y el segundo en cada frame impar:
FrameAnimation { running: true onTriggered: { if (currentFrame % 2 == 0) updateUIElement1(); else updateUIElement2(); } }
Por defecto, frame es 0.
elapsedTime : real [read-only]
Esta propiedad contiene el tiempo (en segundos) desde el inicio anterior.
Por defecto, elapsedTime es 0.
frameTime : real [read-only]
Esta propiedad contiene el tiempo (en segundos) desde la última actualización de fotogramas.
El siguiente ejemplo muestra cómo utilizar frameTime para animar elementos con velocidad variable, ajustándose a las tasas de refresco de pantalla y a posibles caídas de fps.
Rectangle {
id: rect
property real speed: 90
width: 100
height: 100
color: "red"
anchors.centerIn: parent
}
FrameAnimation {
id: frameAnimation
running: true
onTriggered: {
// Rotate the item speed-degrees / second.
rect.rotation += rect.speed * frameTime
}
}Por defecto, frameTime es 0.
paused : bool
Si se establece en true, pausa la animación de fotogramas; en caso contrario, la reanuda.
paused por defecto es false.
Véase también pause() y resume().
running : bool
Si se establece en true, inicia la animación de fotogramas; en caso contrario, la detiene.
running por defecto es false.
Véase también stop(), start(), y restart().
smoothFrameTime : real [read-only]
Esta propiedad contiene el tiempo suavizado (en segundos) desde la actualización del fotograma anterior.
El siguiente ejemplo muestra cómo utilizar smoothFrameTime para mostrar el promedio de fps.
Text {
text: "fps: " + frameAnimation.fps.toFixed(0)
}
FrameAnimation {
id: frameAnimation
property real fps: smoothFrameTime > 0 ? (1.0 / smoothFrameTime) : 0
running: true
}Por defecto, smoothFrameTime es 0.
Documentación de señales
triggered()
Esta señal se emite cuando FrameAnimation ha avanzado a un nuevo fotograma.
Nota: El manejador correspondiente es onTriggered.
Documentación del método
void pause()
Pausa la animación de fotogramas.
Si la animación de fotogramas ya está pausada o no running, llamar a este método no tiene ningún efecto. La propiedad paused será verdadera después de una llamada a pause().
void reset()
Restablece las propiedades de animación de los fotogramas.
Al llamar a este método se restablecen los valores iniciales (0) de frame y elapsedTime. Este método no tiene efecto sobre las propiedades running o paused y puede ser llamado mientras sean verdaderas o falsas.
La diferencia entre llamar a reset() y restart() es que reset() siempre inicializará las propiedades mientras que restart() las inicializa sólo en la siguiente actualización de fotograma, lo que no ocurre, por ejemplo, si restart() es seguido inmediatamente por pause().
void restart()
Reinicia la animación de fotogramas.
Si FrameAnimation no se está ejecutando, se iniciará; en caso contrario, se detendrá, se restablecerá al estado inicial y se iniciará. La propiedad running será verdadera tras una llamada a restart().
void resume()
Reanuda una animación de fotogramas pausada.
Si la animación de fotogramas no está pausada o no es running, la llamada a este método no tiene ningún efecto. La propiedad paused será false después de una llamada a resume().
void start()
Inicia la animación de fotogramas.
Si la animación de fotogramas ya se está ejecutando, la llamada a este método no tiene ningún efecto. La propiedad running será verdadera después de una llamada a start().
void stop()
Detiene la animación de fotogramas.
Si la animación de fotogramas no se está ejecutando, la llamada a este método no tiene ningún efecto. Ambas propiedades running y paused serán falsas después de una llamada a stop().
© 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.