【发布时间】:2018-12-27 10:35:13
【问题描述】:
我使用QTreeView (PyQt 5) 来显示可用的字体,效果很好。此外,我还有一个QLineEdit 来使用QSortFilterProxyModel.setFilterRegExp() 设置过滤器表达式,似乎也很好用。
问题是我希望过滤器仅适用于顶级条目。我的树显示如下:
> Helvetica LT Std
> Helvetica LT Std
Italic
Bold
Regular
> Helvetica LT Std Black
Regular
Italic
等等。这意味着当我输入“Helv”作为正则表达式时,所有其他字体都被正确隐藏,还有样式行,因为它们没有字体名称。
据我了解,我应该继承 QSortFilterProxyModel 并覆盖 filterAcceptsRow() 方法。如果该行是顶级条目,我会调用super() 应用常规过滤,否则返回True 以避免过滤子元素。
我的问题是如何确定该行是否具有模型的invisibleRootItem() 以外的父级。可能这非常容易,但我仍然对架构感到困惑。
我有覆盖函数的接口:
def filterAcceptsRow(self, row, parent):
因为row 只是一个整数,我不能用它做任何事情(?)而parent 是QModelIndex,这是一个非持久性引用,对吧?要回答的问题是“这个索引是否指向源模型的invisibleRootItem()?”。
我该如何询问这种情况?
【问题讨论】:
-
提示:如果
parent为空 - 它指的是顶级项目,否则它指向父项目。 -
好的,它并不完全准确,但让我走上了正轨(见我的回答)
标签: python pyqt pyqt5 qtreeview qsortfilterproxymodel