答案 0 :(得分:8)
答案 1 :(得分:3)
我不知道这是Qt 4.8新版本中的错误,但sje397解决方案对我不起作用(在QTreeView上)。
我分享了我发现的最佳解决方案,即按降序对索引进行排序,并从头开始删除行。
QModelIndexList indexes = pTreeview->selectionModel()->selectedIndexes();
qSort(indexes.begin(), indexes.end(), qGreater<QModelIndex>());
for(iter = indexes.constBegin(); iter != indexes.constEnd(); ++iter){
pModels->removeRow((*iter).row(), (*iter).parent());
}
答案 2 :(得分:2)
我在2016年挖掘了你的问题......
原始解决方案的问题在于它使索引无效,即如果要在删除第五项后删除索引为5,6和7的元素,则项目编号6现在变为项目编号5,依此类推。 / p>
为了使您的解决方案有效,您无需在循环中每次评估selectionModel()->selectedIndexes()
。诀窍是从结束开始并迭代回到开头。如果您先删除项目编号7,则编号为5和6的项目将保留其位置。
给大家一些代码:
QModelIndexList selectedIndexes(listView->selectionModel()->selectedIndexes());
for (QModelIndexList::const_iterator it = selectedIndexes.constEnd() - 1;
it >= selectedIndexes.constBegin(); --it) {
model->removeRow(it->row());
}
希望这会对一些随机的Google员工有所帮助。
答案 3 :(得分:1)
通过多行删除更加优化:
QVector<QItemSelectionRange> ranges = ui.listView->selectionModel()->selection().toVector();
foreach (const QItemSelectionRange& range, ranges)
{
ui.listView->model()->removeRows(range.top(), range.height());
}