【发布时间】:2020-12-04 15:39:31
【问题描述】:
我一直在使用 DelegateModel 和 DelegateModelGroup 来仅在我的委托中显示列表模型的某些项目。该过程与this question的第一个答案中描述的过程基本相同。 DelegateModel 的代码如下。
DelegateModel {
id: displayDelegateModel
delegate: mMissionDelegate
model: mMissionModel
groups: [
DelegateModelGroup {
includeByDefault: false
name: "todaysMissions"
}
]
filterOnGroup: "todaysMissions"
Component.onCompleted: {
updateMissions()
}
}
我正在使用它,以便一次仅在委托中显示 ListModel 中的 3 个随机元素。然后,一旦来自 c++ 的计时器超时并发出信号,我就会使用一个函数来更新这些,以便使用新的 3 个元素。这是更新函数的代码,他与c++的连接。
Connections{
target: FlashingTimer
function onCallUpdateMissions(){
updateMissions();
}
}
function updateMissions(){
var rowCount = mMissionModel.count;
mArray = [];
displayDelegateModel.items.remove(0,displayDelegateModel.items.count);
for(let i =0;i < rowCount;i++ ) {
let entry = mMissionModel.get(i);
mArray.push(entry)
}
let arr = mArray.sort(() => Math.random() - Math.random()).slice(0, 3)
displayDelegateModel.items.insert(arr[0], "todaysMissions");
displayDelegateModel.items.insert(arr[1], "todaysMissions");
displayDelegateModel.items.insert(arr[2], "todaysMissions");
}
一开始,它也会自动调用带有 Component.onCompleted 的函数。 我的问题是,我无法弄清楚如何在切换之前从组中删除所有内容。我认为 items.remove 行会这样做,但即使 items.count 变为零,项目仍然出现在委托中,并且 items.insert 只是添加到底部(因此 6 个委托可见)。
如果我有一个简单的语法或者我应该使用完全不同的方法,有人知道我可以做到这一点吗?
【问题讨论】:
标签: javascript qt delegates qml