有没有办法从QAbstractListModel中有效地删除多个不连续的行?效率不高的例子:
// Single row removal
void remove (int idx) {
beginRemoveRows (noParent (), idx, idx);
// internal remove
endRemoveRows ();
}
// Remove each row by calling beginRemoveRows multiple times
void removeMultiple (const QList<QObject*> &items) {
foreach (auto item, items)
{
int idx = findIndexInternal(item);
beginRemoveRows (noParent (), idx, idx);
// internal remove
endRemoveRows ();
}
}
此致
答案 0 :(得分:1)
此序列可用于任何结构更新,以代替 更多高级且方便的受保护方法。例如,如果 两百万行的模型需要删除所有奇数行, 即1个元素的1百万个贬义范围。这将是 可以使用beginRemoveRows和endRemoveRows一百万次,但是 那显然是低效的。相反,这可以表示为 一次布局更改,更新所有必要的持久索引 一次。
似乎您可以使用layoutAboutToBeChanged()和layoutChanged()向基础模型发出较大的更改信号。我还没有测试过。
更新:我目前正在使用这种体系结构,并且可以解决问题。您甚至不必用信号通知行删除/添加,因为这是由布局信号处理的。