#qt #animation #qml
#qt #Анимация #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 , она имеет следующее объявление Q_PROPERTY:
Q_PROPERTY (QDeclarativeListProperty <Bar> myModel READ myModel
NOTIFY myModelChanged)
Теперь моя проблема в том, что каждый раз, когда я добавляю новый элемент к базовому QList
, анимация, указанная в Bar
, сбрасывается, поэтому на практике элементы всегда полностью перекрываются. Чего я хочу, так это того, чтобы анимации элементов не были синхронными, и каждый из них мог беспрепятственно продолжаться независимо от остальных. Возможно ли это сделать?
Приветствия
Ответ №1:
Вам следует использовать QAbstractItemModel (QStandardItemModel может быть проще всего), а не QList. QAbstractItemModel уведомляет представление о вставке / удалении / перемещении новых элементов, и представление реагирует соответствующим образом, изменяя свое содержимое. В отличие от этого, представление ничего не знает об изменениях, внесенных в QList; только то, что что-то изменилось. Это означает, что у списка нет другого выбора, кроме как уничтожить и воссоздать всех делегатов.