【问题标题】:QTableView / QStandardItemModel update without losing selection / sort orderQTableView / QStandardItemModel 更新不丢失选择/排序顺序
【发布时间】:2012-08-06 10:10:37
【问题描述】:

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

我测试了两种方法:

  1. 通过clear() 清除模型并重新添加行会“破坏”包括标题在内的所有内容。
  2. Removing 并重新添加所有行会保留标题,但仍会“破坏”选择和排序顺序。

我可以尝试手动 a) 删除所有不再需要的行,然后 b) 更新已更改行的项目。但是没有更简单的方法吗?

【问题讨论】:

  • 您尝试过使用 QProxyModel 吗?文档现在说它已经过时了,但可能符合您的目的
  • 我看不出这对我有什么帮助。我可以先更新代理上的所有数据,但是呢?基本思路是什么?
  • 代理应该处理选择和排序顺序,数据模型只提供数据

标签: qt qt4 qtableview


【解决方案1】:

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

更多信息:

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 2019-09-16
      • 2012-04-19
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      相关资源
      最近更新 更多