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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top