Asynchrone (Art) Animation in QML
Frage
Nehmen wir an, ich habe die folgenden QML -Komponenten:
Foo.qml
import Qt 4.7
Rectangle {
Repeater {
model: myModel
delegate: Bar {
barProp: elemProp
}
}
}
Bar.qml
import Qt 4.7
Rectangle {
property string barProp: ""
Text {
text: barProp
NumberAnimation on x {
from: 0; to: 100
duration: 1000
loops: Animation.Infinite
}
}
}
Ich unterhalte MyModel von C ++, es hat die folgende q_property -Deklaration:
Q_PROPERTY (QDeclarativeListProperty <Bar> myModel READ myModel
NOTIFY myModelChanged)
Mein Problem ist nun, dass jedes Mal, wenn ich dem zugrunde liegenden ein neues Element hinzufüge QList
, die angegebene Animation in Bar
Zurückgesetzt, also überlappen sich die Elemente in der Praxis immer vollständig. Ich möchte, dass die Elementanimationen nicht synchron sind und jeder unabhängig vom Rest nahtlos fortgesetzt werden kann. Ist das möglich?
Prost
Lösung
Sie sollten ein QabstractItemmodel (QStandardItemmodel möglicherweise am einfachsten sein) als eine Qlist verwenden. QabstractItemModel benachrichtigt die Ansicht, wenn neue Elemente eingefügt/entfernt/bewegt werden und die Ansicht durch Ändern des Inhalts angemessen reagiert. Im Gegensatz dazu weiß die Ansicht nichts über die Änderungen an einer Qlist; Nur dass sich etwas geändert hat. Dies bedeutet, dass die Liste keine andere Wahl hat, als alle Delegierten zu zerstören und neu zu erstellen.