从排序不同于 table 视图的 table 模型中删除右行

Delete right row from a table model that is sorted differently than the table view

我有一个 QStandardItemModel 和一个 QTableView。视图的排序方式与模型不同。我正在使用 QSortFilterProxyModel。

如果我 select 视图中的一行要删除,我如何知道对应于模型中的哪一行?

来自,

http://doc.qt.io/qt-5/qitemselectionmodel.html

QModelIndexList QItemSelectionModel::selectedIndexes() const

Returns a list of all selected model item indexes. The list contains no duplicates, and is not sorted.

这可以从视图的选择模型中访问。

您还可以确定视图中的哪一行代表哪个 QModelIndex。例如 QAbstractItemView::visualRect(const QModelIndex &) 获取索引的视觉矩形。还有indexAt(const QPoint &)可以映射到其他方向。

既然你添加了你正在使用代理模型,那么使用代理模型的功能映射到原始模型 -- QSortFilterProxyModel::mapToSource

综上所述,

  1. 获取选择模型并选择QModelIndex
  2. 映射到原始 QModelIndex
  3. 删除原来的QStandardItemModel