QTableView / QStandardItemModel更新而不会丢失选择/排序顺序

时间:2012-08-06 10:10:38

标签: qt qt4 qtableview

目前,我想更新QStandardItemModel 中的行项目,而不会在相应的QTableView中丢失排序顺序和行选择。

我测试了两种方法:

  1. clear()清除模型并重新添加行“销毁”包括标题在内的所有内容。
  2. Removing并重新添加所有行会保留标题,但仍会“销毁”选择和排序顺序。
  3. 我可以尝试手动a)删除不再需要的所有行,然后b)更新已更改行的项目。但是没有更简单的方法吗?

2 个答案:

答案 0 :(得分:4)

我不知道,您在更新之前如何对数据进行排序,但请查看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);

更多相关信息:

答案 1 :(得分:1)

您可以删除不再需要的行并添加新行或手动记住排序顺序以及清除前选择的项目。即分配一个唯一的ID(可以使用带有自定义角色的setData()),在清除所选项目之前检索该ID,并在重新创建项目后重新应用选择。