En esta página

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

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.