index
не является вложенным свойством, это свойство контекста.
Поскольку Repeater
сам создает экземпляры делегатов, при этом он может предоставлять собственный контекст.
ВВ этом контексте у вас есть index
, свойство для каждой роли вашей модели (или modelData
, если это модель без ролей) и свойство объекта model
, содержащее все ранее упомянутые свойства.Объект model
предназначен для доступа к другим свойствам с более точным именем, чтобы избежать затенения.Например, если ваша исходная модель имеет роль text
, а ваш делегат имеет свойство text
, выполнение text: text
не будет очень далеко.Чтобы решить эту проблему, вы можете сделать text: model.text
.
Подводя итог, ваш делегат имеет доступ к следующим свойствам контекста:
Для модели без ролей (QStringList
, QObjectList
, JSмассив, целое число, ...):
Для модели с ролями (c ++ QAbstractListModel
, ListModel
, ...):
index
role1
role2
- ...
model
Почему ListView
использует прикрепленныйсвойства, такие как ListView.isCurrentItem
, а не свойства контекста, объясняются тем, что ListView
напрямую не создает экземпляры своих делегатов.Он использует QQmlDelegateModel
внутри (Repeater
тоже использует его).Это QQmlDelegateModel
, который предоставляет свойства индекса и контекста роли, но он не знает о ListView
специфических свойствах, поэтому ListView
должен впоследствии предоставлять их через прикрепленные свойства.