过滤 QTableView 中的多列
Posted
技术标签:
【中文标题】过滤 QTableView 中的多列【英文标题】:Filtering multiple columns in QTableView 【发布时间】:2021-10-04 17:57:36 【问题描述】:我需要创建一个过滤器(搜索),它将在多个列中查找。通过在网上搜索,我从这个链接How to filter Multiple column in Qtableview?找到了 Alex P. 的答案
按照他的回答,我尝试像这样调用 setFilterByColumn:
他的回答
class MultiFilterMode:
AND = 0
OR = 1
class MultiFilterProxyModel(QSortFilterProxyModel):
def __init__(self, *args, **kwargs):
QSortFilterProxyModel.__init__(self, *args, **kwargs)
self.filters =
self.multi_filter_mode = MultiFilterMode.AND
def setFilterByColumn(self, column, regex):
if isinstance(regex, str):
regex = re.compile(regex)
self.filters[column] = regex
self.invalidateFilter()
def clearFilter(self, column):
del self.filters[column]
self.invalidateFilter()
def clearFilters(self):
self.filters =
self.invalidateFilter()
def filterAcceptsRow(self, source_row, source_parent):
if not self.filters:
return True
results = []
for key, regex in self.filters.items():
text = ''
index = self.sourceModel().index(source_row, key, source_parent)
if index.isValid():
text = self.sourceModel().data(index, Qt.DisplayRole)
if text is None:
text = ''
results.append(regex.match(text))
if self.multi_filter_mode == MultiFilterMode.OR:
return any(results)
return all(results)
我怎么称呼它
def __init__(self, window):
self.filter_proxy_model_templates_shots = MultiFilterProxyModel()
def update_search(self):
self.filter_proxy_model_templates_shots.setSourceModel(model)
self.tableViewShotsTemplates.setModel(self.filter_proxy_model_templates_shots)
for i in range(model.columnCount()):
self.lineEditSearchShotSets.textChanged.connect(lambda text, col=i:
self.filter_proxy_model_templates_shots.setFilterByColumn
(col, QRegExp(text, Qt.CaseInsensitive, QRegExp.FixedString)))
但我得到一个错误:
AttributeError: 'PySide2.QtCore.QRegExp' object has no attribute 'match'
我应该如何修改他的代码以使其工作?提前谢谢!
我正在使用 Python 2.7 和 PySide2
【问题讨论】:
如QRegExp 文档中所示,没有match
函数。除了建议的答案,请考虑改用QRegularExpression。
【参考方案1】:
使用QRegex::indexIn()
方法:
results.append(regex.indexIn(text) != -1)
【讨论】:
以上是关于过滤 QTableView 中的多列的主要内容,如果未能解决你的问题,请参考以下文章
如何让QListView显示多列 QTableView与QListView区别在哪里
如何在QTableView Qt C ++中将sqlite db数据显示为多列视图?
使用 QSortFilterProxyModel 过滤 QTableView 后保留选择