我无法检索在 DelegateModel 中为 ListView 实例化的委托的索引。 最小的例子如下:
LastProcedures.qml
ListModel {
ListElement {
procedure: "Liver Resection"
surgeon: "Prof. Dr. Joyride"
recent: true
}
...
}
main.qml
ListView {
id: list_lastProcedures
model: displayDelegateModel
}
DelegateModel {
id: displayDelegateModel
delegate: lastProceduresDelegate
model: LastProcedures {}
groups: [
DelegateModelGroup {
includeByDefault: false
name: "recent"
}
]
filterOnGroup: "recent"
Component.onCompleted: {
var rowCount = model.count;
items.remove(0,rowCount);
for( var i = 0;i < rowCount;i++ ) {
var entry = model.get(i);
// Only the recent three
if((entry.recent == true) && (items.count < 3)) {
items.insert(entry, "recent");
}
}
}
}
Component {
id: lastProceduresDelegate
Text{
text: model.index
}
}
文本索引始终打印-1。如果没有DelegateModel,它会在ListView中打印索引。如何在Listview中访问委托的正确索引?
答案 0 :(得分:1)
我最终没有删除所有条目并将它们添加回组,而是删除不需要的条目。这使索引保持有效。 如果有人能够进一步解释这种行为,那就太好了。
DelegateModel {
id: displayDelegateModel
delegate: lastProceduresDelegate
model: LastProcedures {}
groups: [
DelegateModelGroup {
includeByDefault: true
name: "recenttrue"
}
]
filterOnGroup: "recenttrue"
Component.onCompleted: {
for( var i = 0;i < items.count;i++ ) {
var entry = items.get(i).model;
// Only the recent
if((entry.recent != true)) {
items.removeGroups(i, 1, "recenttrue");
}
}
}
}
答案 1 :(得分:0)
您可以使用“lastProceduresDelegate.DelegateModel.itemsIndex”代替“model.index”
就像这样:
Component {
id: lastProceduresDelegate
Text{
text: lastProceduresDelegate.DelegateModel.itemsIndex
}
答案 2 :(得分:0)
DelegateModel
对于组具有一些隐藏的魔力(虽然不是很明显,但是它是here)。对于您创建的每个组,附加的DelegateModel
属性将收到两个新属性:<group>Index
和in<Group>
。
对于您而言,这意味着您将获得以下属性:recentIndex
和inRecent
(或您自己的答案:recenttrueIndex
和inRecenttrue
)。
我认为您想做的事情应该走recenttrue
路线并起草Component
,如下所示:
Component {
id: lastProceduresDelegate
Text {
text: lastProceduresDelegate.DelegateModel.recenttrueIndex
}
}