2011-04-27 40 views
0

比方說,我有以下QML組件:異步的QML(種)動畫

Foo.qml

import Qt 4.7 

Rectangle { 
    Repeater { 
    model: myModel 
    delegate: Bar { 
     barProp: elemProp 
    } 
    } 
} 

Bar.qml

import Qt 4.7 

Rectangle { 
    property string barProp: "" 

    Text { 
    text: barProp 

    NumberAnimation on x { 
     from: 0; to: 100 
     duration: 1000 
     loops: Animation.Infinite 
    } 
    } 
} 

我保持myModel來自C++,它具有以下Q_PROPERTY聲明:

Q_PROPERTY (QDeclarativeListProperty <Bar> myModel READ myModel 
      NOTIFY myModelChanged) 

現在,我的問題是,我每次添加一個新的元素添加到底層QList,在Bar復位指定的動畫,所以在實踐中,元素始終完全重疊。我想要的是元素動畫不是同步的,並且每個元素都可以無縫地繼續下去,而不管其他的。這可能嗎?

乾杯

回答

1

您應該使用化QAbstractItemModel(QStandardItemModel可能是最簡單的),而不是一個的QList。 QAbstractItemModel在插入/移除/移動新項目時通知視圖,並且視圖通過修改其內容來適當地作出反應。相比之下,該視圖對QList所做的更改一無所知;只是有所改變。這意味着該列表別無選擇,只能銷燬並重新創建所有代表。

+0

啊歡呼聲,這是非常有道理的,我會給它一個鏡頭 – xcvii 2011-04-28 17:59:17