2016-03-30 5 views
0

Ich habe eine Qt 5.6 NumberAnimation (viele, in der Tat). Ich möchte die Auswertungszeit von ihnen explizit kontrollieren. Stellen Sie sich zum Beispiel vor, dass dies ein Animationsprogramm ist und der Benutzer Animationskurven erstellt hat und nun den Abspielkopf entlang der Timeline vor- und zurückschrubbt. Immer wenn ich eine neue Abspielzeit erhalte, möchte ich alle Animationen bewerten, um den für diese Zeit geeigneten Wert zu erzeugen.Kontrolle Animationszeit (Scrubbing) in QML

Aus der Qt-Dokumentation sieht das nicht möglich. Die von Animation geerbten Mitglieder erlauben mir start() und pause() und resume() die Animation, restart() von Anfang an oder complete() bis zum Ende. Aber ich sehe keine Methode oder Eigenschaft, die es mir erlaubt, die Zeit zu kontrollieren. Allerdings habe ich (anhand von Beispielen) viele QML-Funktionen gefunden, die zwar möglich, aber nicht offensichtlich dokumentiert sind. Ist das möglich mit NumberAnimation?

Wenn dies mit NumberAnimation nicht möglich ist, gibt es eine andere Möglichkeit, dies zu tun? Eine Möglichkeit, stattdessen einen beliebigen 2D-Pfad für die Animation darzustellen und dann den Y-Schnittpunkt an einer gegebenen X-Koordinate entlang des Pfades auszuwerten?

+0

Number wird „Dauer“ von PropertyAnimation vererben, Sie, dass versucht haben? –

+0

@FrankOsterfeld Danke für den Vorschlag, aber nein, das habe ich nicht versucht. Die ['duration' Eigenschaft] (http://doc.qt.io/qt-5/qml-qtquick-propertyanimation.html#duration-prop) steuert die Gesamtlänge der Animation (wie lange es dauert vom Start weg zu laufen) beenden). Es erlaubt mir nicht, durch die Animation auf 95% zu springen, dann auf 94%, dann auf 90%, dann auf 25%, dann auf 75% usw. – Phrogz

Antwort

2

Wie via posting on the Qt Forums entdeckt, ist die Lösung eine AnimationController zu verwenden, um die Animation zu Sollwert und Steuern, Einstellen der progress eigenschafts normalisierten im Bereich [0,1] -to die Animationszeit zu steuern.

Um auf einmal viele Animationen zu steuern von einem einzigen AnimationController, wickeln Sie die Animationen in einem ParallelAnimation:

AnimationController { 
    id: controller 
    animation: ParallelAnimation { 
    id: anim 
    NumberAnimation { ... } 
    NumberAnimation { ... } 
    SequentialAnimation { 
     NumberAnimation { ... } 
     NumberAnimation { ... } 
    } 
    } 
}