假设我有以下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
中指定的动画都会重置,因此在实践中,元素始终完全重叠。我想要的是元素动画不是同步的,并且每个动画都可以无缝地继续,而不管其余部分。这可能吗?
干杯
答案 0 :(得分:1)
您应该使用QAbstractItemModel(QStandardItemModel可能最简单)而不是QList。 QAbstractItemModel在插入/移除/移动新项目时通知视图,并且视图通过修改其内容进行适当的反应。相反,视图对QList所做的更改一无所知;只有事情发生了变化。这意味着列表别无选择,只能销毁并重新创建所有代理。