目前我想在QStandardItemModel
不丢失排序顺序和行选择的情况下更新 a 中的行项目QTableView
。
我测试了两种方法:
- 通过清除模型
clear()
并重新添加行会“破坏”包括标题在内的所有内容。 - 删除和重新添加所有行会保留标题,但仍会“破坏”选择和排序顺序。
我可以尝试手动 a) 删除所有不再需要的行,然后 b) 更新已更改行的项目。但是没有更简单的方法吗?
目前我想在QStandardItemModel
不丢失排序顺序和行选择的情况下更新 a 中的行项目QTableView
。
我测试了两种方法:
clear()
并重新添加行会“破坏”包括标题在内的所有内容。我可以尝试手动 a) 删除所有不再需要的行,然后 b) 更新已更改行的项目。但是没有更简单的方法吗?
我不知道,您在更新之前如何对数据进行排序,但请看一下 QTableView 的sortByColumn()函数。
至于选择,如果它仍然消失,您可以手动放回您的选择,它应该在哪里:
// You access the selected index when the editing starts
QModelIndex index = table->selectionModel()->currentIndex();
//Later when you finished editing, you can select it again
table->selectionModel()->select(index, QItemSelectionModel::Select);
更多关于这个:
您可以删除不再需要的行并添加新行,也可以手动记住排序顺序以及在清除之前选择了哪些项目。即分配一个唯一的ID(可以使用具有自定义角色的setData()),在从所选项目中清除之前检索它,并在重新创建项目后重新应用选择。