qml中的异步(种类)动画

时间:2011-04-27 11:46:19

标签: qt animation 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
    }
  }
}

我从C ++维护myModel,它有以下Q_PROPERTY声明:

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

现在,我的问题是,每次向基础QList添加新元素时,Bar中指定的动画都会重置,因此在实践中,元素始终完全重叠。我想要的是元素动画不是同步的,并且每个动画都可以无缝地继续,而不管其余部分。这可能吗?

干杯

1 个答案:

答案 0 :(得分:1)

您应该使用QAbstractItemModel(QStandardItemModel可能最简单)而不是QList。 QAbstractItemModel在插入/移除/移动新项目时通知视图,并且视图通过修改其内容进行适当的反应。相反,视图对QList所做的更改一无所知;只有事情发生了变化。这意味着列表别无选择,只能销毁并重新创建所有代理。