2015-08-20 18 views
6

Impossibile passare l'animazione da un oggetto a un altro. L'ID cambia (stampa 'world' nel log), ma non trasferisce l'animazione: hello continua a lampeggiare e world è statico.Modifica target animazione

Funziona correttamente solo quando si chiama a.restart(). Quando non ci sono funzioni, solo binding, è possibile utilizzare onChanged e controllare il modo in cui l'animazione si arresta (completa o sospende) if (running) { complete(); restart(); }.

import QtQuick 2.5 

Column { 
    ColorAnimation { 
     id: a 

     target: lab1 
     property: "color" 

     running: true 
     loops: Animation.Infinite 
     duration: 500 

     from: "black" 
     to: "red" 
    } 

    Text { 
     id: lab1 

     text: "hello" 

     MouseArea { 
      anchors.fill: parent 
      onClicked: { 
       a.target = lab2 
       console.log("changed") 
       console.log(a.target.text) 
      } 
     } 
    } 

    Text { 
     id: lab2 

     text: "world" 
    } 
} 
+1

Questo sembra un bug (o per lo meno un problema di documentazione), quindi inviare una segnalazione a bugreports.qt.io. – cmannett85

risposta

1

Userò questo per ora (appena aggiunto onTargetChanged):

import QtQuick 2.5 

Column { 
    ColorAnimation { 
     id: a 

     target: lab1 

     onTargetChanged: { 
      if (running) { complete(); restart(); } 
     } 

     property: "color" 

     running: true 
     loops: Animation.Infinite 
     duration: 500 

     from: "black" 
     to: "red" 
    } 

    Text { 
     id: lab1 

     text: "hello" 

     MouseArea { 
      anchors.fill: parent 
      onClicked: { 
       a.target = lab2 
       console.log("changed") 
       console.log(a.target.text) 
      } 
     } 
    } 

    Text { 
     id: lab2 

     text: "world" 
    } 
} 

E con associazione (l'animazione viene trasferita su un'altra etichetta quando viene premuto):

import QtQuick 2.5 

Column { 
    id: root 

    ColorAnimation { 
     id: a 

     target: ma.pressed ? lab2 : lab1 

     onTargetChanged: { 
      if (running) { complete(); restart(); } 
     } 

     property: "color" 

     running: true 
     loops: Animation.Infinite 
     duration: 500 

     from: "black" 
     to: "red" 
    } 

    Text { 
     id: lab1 

     text: "hello" 

     MouseArea { 
      id: ma 
      anchors.fill: parent 
     } 
    } 

    Text { 
     id: lab2 

     text: "world" 
    } 
} 
+0

l'esecuzione di un 'restart()' funziona alla grande. Grazie –

1

Si dovrebbe smettere l'animazione prima di cambiare il bersaglio:

a.running = false 
a.target = lab2 
a.running = true 

Funziona bene per me

+0

In associazione non c'è possibilità di farlo. – Velkan

+0

Cosa intendi? Puoi semplicemente sostituire 'a.target = lab2' con il mio codice e basta. – folibis

+0

Guarda nella seconda parte della risposta con 'onTargetChanged'. Non c'è 'onClick' per incollare il codice lì. E il mio progetto attuale non ha nemmeno "onClick". – Velkan