使用 QSortFilterProxyModel 过滤 QTableView 后保留选择

Posted

技术标签:

【中文标题】使用 QSortFilterProxyModel 过滤 QTableView 后保留选择【英文标题】:Keep the selection after filtering a QTableView with a QSortFilterProxyModel 【发布时间】:2011-04-05 13:48:14 【问题描述】:

我创建了一个链接到 QSortFilterProxyModelQTableView 链接到另一个模型。 在 QTableView(在 GUI 中)下有一个 QLineEdit 用于“搜索”视图中的元素。

我的想法是在QLineEdit 中写入我要查找的内容,并让视图仅显示匹配的元素。过滤后,我想选择相关项目,然后清理QLineEdit 以在完整视图中返回。 一切正常,但将被过滤的选定项目也会因为失效而失去选择。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

为什么你不记得过滤之前选择的行,然后在完成过滤后恢复它。

我想你可以直接使用QItemSelectionModel

过滤前使用QItemSelectionModel::selectedRows(),过滤后使用QItemSelectionModel::select()选择行。

我知道这个帖子已经很老了,但我想我会把评论留给其他面临类似问题的人。

【讨论】:

selectRows() 返回 QModelIndexList,不能与 select() 一起使用。但是你可以使用返回QItemSelection的QItemSelectionModel::selection(),可以在QItemSelectionModel::select()中使用。【参考方案2】:

从您写的内容看来,问题出在您清理QLineEdit 内容时,QTableView 丢失选择。如果您在行编辑的editingFinished() 或textChanged() 信号中开始'搜索' 例程,您可以在更改QLineEdit 之前从它们中disconnect,然后重新连接。或者使用布尔标志并且在它打开时不要更改过滤。如果您发布您遇到的问题的代码的简化版本,那么回答您的问题会容易得多。

【讨论】:

如果我选择一个项目并返回到完整视图,它将保留选择,但如果在完整视图中我选择一个项目,然后我过滤除该项目之外的视图,它将失去选择.

以上是关于使用 QSortFilterProxyModel 过滤 QTableView 后保留选择的主要内容,如果未能解决你的问题,请参考以下文章

Qt5:使用 QSortFilterProxyModel 时的拖放

如何使用带有 Qabstractitemmodel 的 QSortFilterProxyModel 隐藏第一列

QSortFilterProxyModel 不更新 QTableview

将 QML 中的 QSortFilterProxyModel 与 PyQt5 一起使用

如何使用 QAbstractTableModel 而不是 QSortFilterProxyModel 进行排序和过滤

如何在数据库中使用 QSortFilterProxyModel?