【发布时间】:2017-04-18 14:43:09
【问题描述】:
我无法检索在 DelegateModel 中为 ListView 实例化的委托的 index。 最小的例子如下:
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 中访问代理的正确索引?
【问题讨论】:
-
您是否尝试过简单的
index而不是model.index? -
@Silex:
index只是model.index的简写,不是吗?但是,如果您删除您的过滤功能,并打开filterOnGroup,您将得到正确的model.index。但我还是不明白你的功能。 Maybe this helps you。但如果您只想过滤和/或排序,您可能需要使用性能更高的QSortFilterProxyModel。它的基本功能很容易暴露。一个不错的 QML FilterModel 是这样的:github.com/oKcerG/SortFilterProxyModel -
model.index 和 index 是等价的。因为我稍后会有一个 c++ 模型,所以我想用 QML 中的一些虚拟数据创建一个原型。但似乎我必须立即跳入 QSortFilterProxyModel。 @derM 您的链接已经是此实现的基础。该函数只是清空“项目”并将相关条目添加到“最近”组。它运作良好,但我无法获得该组中条目的索引。
-
link 文档写道:“代表也可以使用包含模型中项目索引的特殊索引角色。请注意,如果项目被删除,则此索引设置为 -1该模型。”那么从项目中删除是问题吗?并且再次插入后没有设置索引吗?
-
我认为一开始的删除也可能是问题所在。但是注释掉那条特定的行并没有帮助。