2016-05-25 14 views
0

Ich habe eine generische QtObject in QML, die ich animierte Eigenschaften von, und ich möchte sie alle zusammen starten/stoppen. Ich schrieb den folgenden Code, aber Qt Creator Fehler: qrc:/DummyData.qml:11 Cannot assign to non-existent default propertyAnimationen für verschiedene Eigenschaften gruppieren

... wo Zeile 11 ist die mit ParallelAnimation {.

import QtQuick 2.5 

QtObject { 
    property real windowFrontLeftOpenPct: 0.0 
    property real windowFrontRightOpenPct: 0.0 
    property real windowRearLeftOpenPct: 0.0 
    property real windowRearRightOpenPct: 0.0 

    property bool windowAnimationsActive: false 

    ParallelAnimation { 
    running: windowAnimationsActive 

    SequentialAnimation on windowFrontLeftOpenPct { 
     loops: Animation.Infinite 
     NumberAnimation { from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
     NumberAnimation { from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
    } 
    SequentialAnimation on windowFrontRightOpenPct { 
     loops: Animation.Infinite 
     NumberAnimation { from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
     NumberAnimation { from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
    } 
    SequentialAnimation on windowRearLeftOpenPct { 
     loops: Animation.Infinite 
     NumberAnimation { from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
     NumberAnimation { from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
    } 
    SequentialAnimation on windowRearRightOpenPct { 
     loops: Animation.Infinite 
     NumberAnimation { from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
     NumberAnimation { from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
    } 
    } 
} 

Kann ich verschiedene Zieleigenschaften nicht in einer einzigen parallelen Animation mischen?


Hinweis: eine Abhilfe in diesem Fall ist die ParallelAnimation Wrapper zu entfernen und gelten running:windowAnimationsActive zu jedem des SequentialAnimations. Dies ist jedoch keine generische Lösung, denke ich, da es mir nicht möglich ist, viele Animationen über einen übergeordneten Wrapper einfach anzuhalten und wieder aufzunehmen.

+0

Das 'QtObject' hat keine Standardeigenschaft. Wenn Sie untergeordnete Elemente in visuellen Elementen in QML deklarieren, werden sie der speziellen Standardeigenschaft eines Items hinzugefügt. 'QtObject hat keine. Sie müssen explizit über die Instantiierung des Child 'ParallelAnimation' sprechen - fügen Sie es in eine benutzerdefinierte benannte Eigenschaft ein. AFAIK, dieses Problem hat nichts mit Animationen zu tun. Ein minimaler Testfall ist ein 'QtObject', das Sie * irgendein * QML-Unterobjekt in:' QtObject {QtObject {}} 'erstellen. –

+1

@KubaOber Das klingt vernünftig. Darf ich fragen, warum Sie kommentiert haben, anstatt zu antworten? – Phrogz

+1

Ich antworte normalerweise nur, wenn ich Zeit habe, Code auszuführen, um sicherzustellen, dass ich nicht voll davon bin :) Ich habe in den letzten Monaten auch keine QML geschrieben, daher bin ich in diesem Bereich etwas eingerostet. Lieber sicher als Nachsicht, und ich hasse es, in einer Antwort irreführend zu sein. Kommentare sind faires Spiel, obwohl :) –

Antwort

2

einfach speichern sie in benutzerdefinierte Eigenschaft:

QtObject { 
    id: windowPositions 
    property real windowFrontLeftOpenPct: 0.0 
    property real windowFrontRightOpenPct: 0.0 
    property real windowRearLeftOpenPct: 0.0 
    property real windowRearRightOpenPct: 0.0 

    property bool windowAnimationsActive: false 

    property ParallelAnimation windowAnimations: ParallelAnimation { 
     running: windowAnimationsActive 

     SequentialAnimation { 
      loops: Animation.Infinite 
      NumberAnimation { target: windowPositions; property: "windowFrontLeftOpenPct"; from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
      NumberAnimation { target: windowPositions; property: "windowFrontLeftOpenPct"; from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
     } 
     SequentialAnimation { 
      loops: Animation.Infinite 
      NumberAnimation { target: windowPositions; property: "windowFrontRightOpenPct"; from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
      NumberAnimation { target: windowPositions; property: "windowFrontRightOpenPct"; from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
     } 
     SequentialAnimation { 
      loops: Animation.Infinite 
      NumberAnimation { target: windowPositions; property: "windowRearLeftOpenPct"; from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
      NumberAnimation { target: windowPositions; property: "windowRearLeftOpenPct"; from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
     } 
     SequentialAnimation { 
      loops: Animation.Infinite 
      NumberAnimation { target: windowPositions; property: "windowRearRightOpenPct"; from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
      NumberAnimation { target: windowPositions; property: "windowRearRightOpenPct"; from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
     } 
    } 
} 

Beachten Sie, dass Sie nicht die ‚auf Eigenschaft‘ Syntax, die Art und Weise verwenden können. Sie müssen nach Ziel und Name angeben. Und man konnte properties verwendet viele Änderungen mit einer Animation:

QtObject { 
    id: windowPositions 
    property real windowFrontLeftOpenPct: 0.0 
    property real windowFrontRightOpenPct: 0.0 
    property real windowRearLeftOpenPct: 0.0 
    property real windowRearRightOpenPct: 0.0 

    property bool running: false 

    property SequentialAnimation windowAnimations: SequentialAnimation { 
      running: windowPositions.running 
      loops: Animation.Infinite 

      NumberAnimation { target: windowPositions; 
       properties: "windowFrontLeftOpenPct,windowFrontRightOpenPct,windowRearLeftOpenPct,windowRearRightOpenPct"; 
       from:0; to:1; duration:2000; easing.type:Easing.InOutSine } 
      NumberAnimation { target: windowPositions; 
       properties: "windowFrontLeftOpenPct,windowFrontRightOpenPct,windowRearLeftOpenPct,windowRearRightOpenPct"; 
       from:1; to:0; duration:2000; easing.type:Easing.InOutSine } 
    } 
} 

Das ist nur ein Konzept ist, weil die Schaffung 4 gleiche Eigenschaften für gleichen Wert ist nutzlos, wie nutzlos die QtObject Schaffung hier, und wenn Sie es irgendwo brauchen Ich würde es ein schlechtes Design nennen.

Verwandte Themen