是否有一种方法可以有效地从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 ();
}
}
问候,
此序列可用于任何结构更新,以代替更多高级且方便的受保护方法。例如,如果两百万行的模型需要删除所有奇数行,即1百万个单位各不相同的范围。这将是可以使用beginRemoveRows和endRemoveRows一百万次,但是那显然是低效的。相反,这可以表示为一次布局更改,更新所有必要的持久索引立刻。
似乎您可以使用layoutAboutToBeChanged()和layoutChanged()向基础模型发出较大的更改信号。我还没有测试过。