2016-11-08 53 views
0

我的代碼時:Qt Quick的:代碼冗餘創建過渡

states: [ 
    State { 
     name: "pressed"; when: mouseArea.pressed 
     PropertyChanges { 
      target: foo 
      prop1: 10 
      prop2: 10 
      prop3: 10 
     } 
    }, 
    State { 
     name: "notPressed"; when: !mouseArea.pressed 
     PropertyChanges { 
      target: foo 
      prop1: 1 
      prop2: 1 
      prop3: 1 
     } 
    } 
] 
transitions: [ 
    Transition { 
     to: "*" 
     NumberAnimation { 
      target: foo 
      properties: "prop1,prop2,prop3" 
      duration: 1000 
     } 
    } 
] 

這工作,但需要我去冗餘指定properties: "prop1,prop2,prop3"當屬性更改PropertyChanges元素已經指定。此外,我還需要在NumberAnimation中冗餘指定target: foo,因爲它已在PropertyChanges元素中指定。

可以避免這種冗餘?如果不是,爲什麼不呢?

回答

4

屬性更改並不一定意味着它會動畫。並非所有的財產變更都必須具有相同的動畫。

我沒有在這裏看到冗餘,如果你想要的行爲是默認的,你將無法對發生的事情進行細粒度控制。對於所有屬性更改,您都會陷入同樣的​​行爲,這可能適合您的特定需求,但實際上在所有其他情況下都會遇到問題。

2

正如@ddriver所說,需要對狀態更改期間的動畫進行精細控制。

但是,如果您的示例中所有屬性都更改爲相同的值,則可以重構該屬性並將它們綁定到公共屬性。 像這樣:

property int bar: mouseArea.pressed ? 10 : 1 
prop1: bar 
prop2: bar 
prop3: bar 

states: [ 
    State { 
     name: "pressed"; when: mouseArea.pressed 
     PropertyChanges { 
      target: foo 
      bar: 10 
     } 
    }, 
    State { 
     name: "notPressed"; when: !mouseArea.pressed 
     PropertyChanges { 
      target: foo 
      bar: 1 
     } 
    } 
] 
transitions: [ 
    Transition { 
     to: "*" 
     NumberAnimation { 
      target: foo 
      property: "bar" 
      duration: 1000 
     } 
    } 
] 

或者,如果你的轉換是對稱的(使用同樣的動畫從狀態A去 - >狀態B和的B去 - > A),你可以使用一個Behavior簡化代碼:

property int bar: mouseArea.pressed ? 10 : 1 
prop1: bar 
prop2: bar 
prop3: bar 

Behavior on bar { 
    NumberAnimation { duration: 1000 } 
}