Qt:从QAbstractListModel中删除多行

问题描述 投票:2回答:1

是否有一种方法可以有效地从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 ();
    }
}

问候,

c++ qt qabstractitemmodel qabstractlistmodel
1个回答
0
投票

请参见Qt's Model-View reference

此序列可用于任何结构更新,以代替更多高级且方便的受保护方法。例如,如果两百万行的模型需要删除所有奇数行,即1百万个单位各不相同的范围。这将是可以使用beginRemoveRows和endRemoveRows一百万次,但是那显然是低效的。相反,这可以表示为一次布局更改,更新所有必要的持久索引立刻。

似乎您可以使用layoutAboutToBeChanged()layoutChanged()向基础模型发出较大的更改信号。我还没有测试过。

© www.soinside.com 2019 - 2024. All rights reserved.