使用 QSortFilterProxyModel 过滤 QTableView 后保留选择
Posted
技术标签:
【中文标题】使用 QSortFilterProxyModel 过滤 QTableView 后保留选择【英文标题】:Keep the selection after filtering a QTableView with a QSortFilterProxyModel 【发布时间】:2011-04-05 13:48:14 【问题描述】:我创建了一个链接到 QSortFilterProxyModel
的 QTableView
链接到另一个模型。
在 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 一起使用