2012-10-16 72 views
2

我想用QML圖像元素height屬性製作QML動畫。 但圖像高度屬性的負值在定時器中不起作用。qml圖像大小負值

你能告訴我這個動畫有什麼不對嗎?

import QtQuick 1.1 

Rectangle { 
    width: 300 
    height: 300 

    property int mySize: 10 

    Image { 
     x: 150; y: 150 
     width: 20 
     height: -mySize  // animation does not work in Timer, Why? 
     //height: mySize  // animation works in Timer 
     source: "Bar.jpg" 
    } 
    Timer { 
     interval: 200 
     running: true 
     repeat: true 
     onTriggered: mySize +=5 
    } 
} 

回答

4

首先,(回答你的問題),你不能使用負尺寸。改爲使用scaling,它支持負值。

Scale { 
    yScale: ...    // <-- change this value; 1 = original size 

    Image { 
     x: 150; y: 150 
     width: 20; height: 10 // <-- use constant size 
     source: "Bar.jpg" 
    } 
} 

其次,你應該清楚瞭解animations in QML。在QML中,你不需要定時器來實現動畫。這個想法是,你只告訴動畫的屬性的開始和結束值,並激活這個動畫。您還可以配置動畫的速度/持續時間,甚至配置緩動曲線(最終減慢動畫速度,以及像反彈一樣的花哨的東西......)。一個例子可以是:

import QtQuick 1.1 

Rectangle { 
    width: 300; height:300 

    Scale { 
     Image { 
      x: 150; y: 150 
      width: 20; height: 10 
      source: "Bar.jpg" 
     } 

     NumberAnimation on yScale { 
      from: 1 
      to: -1 
      running: ...  // <-- Animation is running while expression is true 
     } 
    } 
} 

或者,如果你不想使用與Animation.running屬性綁定表達式,您還可以使用的方法Animation.start()stop()等(在動畫設置ID使它可以通過JavaScript進行尋址)。

但是,理解表達式中的屬性綁定並使用它是QML的一個主要部分,因此您應該嘗試使用表達式來表達您想要的內容,而不是使用方法調用,事件,條件等等。這就是QML的方式,以及爲什麼它很美麗。 ;)

+0

非常感謝。現在可以。 –