2015-08-20 7 views
6

एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट को एनीमेशन स्विच नहीं कर सकता। आईडी बदलती है (यह लॉग में 'दुनिया' प्रिंट करती है), लेकिन यह एनीमेशन को स्थानांतरित नहीं करती है: hello अभी भी चमकती है और world स्थिर है।एनीमेशन लक्ष्य बदलना

यह a.restart() पर कॉल करते समय सही ढंग से काम करता है। जब कोई फ़ंक्शन नहीं होता है, तो बस बाइंडिंग्स, आप onChanged का उपयोग कर सकते हैं और यह नियंत्रित कर सकते हैं कि एनीमेशन कैसे बंद हो जाता है (पूर्ण या रोकें) 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

यह एक बग (या कम से कम एक दस्तावेज़ीकरण समस्या) जैसा दिखता है तो bugreports.qt.io पर एक बग रिपोर्ट दर्ज करें। – cmannett85

उत्तर

1

मैं अब के लिए इसका उपयोग करेंगे के लिए ठीक काम करता है (बस 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" 
    } 
} 

और बाध्यकारी के साथ (एनीमेशन दबाए जाने पर किसी अन्य लेबल पर स्विच किया जाता है):

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

एक 'पुनरारंभ()' चल रहा है महान काम करता है। धन्यवाद –

1

आप लक्ष्य को बदलने से पहले एनीमेशन बंद कर देना चाहिए:

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

यह मेरे

+0

बाध्यकारी में ऐसा करने की कोई संभावना नहीं है। – Velkan

+0

आपका क्या मतलब है? आप बस मेरे कोड के साथ 'a.target = lab2' को प्रतिस्थापित कर सकते हैं और यह सब कुछ है। – folibis

+0

'onTargetChanged' के साथ प्रतिक्रिया के दूसरे भाग में देखें। वहां कोड छड़ी करने के लिए कोई 'ऑनक्लिक' नहीं है। और मेरे वास्तविक प्रोजेक्ट में 'ऑनक्लिक' नहीं है। – Velkan

संबंधित मुद्दे