I have an Qml component with a SequentialAnimation
containing a static sequence of PropertyAction
components:
SequentialAnimation {
id: anim
running: true
PropertyAction { target: icon; property: "iconid"; value: propStore.anim1 }
PropertyAction { target: icon; property: "iconid"; value: propStore.anim2 }
PropertyAction { target: icon; property: "iconid"; value: propStore.anim3 }
}
This accomplishes that a specific icon is animated. However now I'd like to make it a little bit dynamic by building the sequence dynamically. The reason is that the propStore
isn't under my control, and users adding new images to the animation sequence require me to make changes to the Qml :(
How should I go about doing this?
My first thought was to dynamically add components to anim.animations
, but that doesn't work (it seems to be a read-only property of SequentialAnimation
.)
My next thought was to add a ListModel
to the outer component, and in its Component.onCompleted
slot I append objects of the shape { image: "animN" }
(I get the "animN" strings using introspection on propStore
.) Then I use the ListModel
to populate a Repeater
. However, the SequentialAnimation
doesn't seem to accept a Repeater
object.
You can't append directly to anim.animations, but you can reaffect it to a new value. Build a JS array from anim.animation, append a dynamically created animation to it, then reaffect it to anim.animations.
Here's a simple example.