Python 如何使用QSortFilterProxyModel';s setFilterRegExp()和filterAcceptsRow()一起

Python 如何使用QSortFilterProxyModel';s setFilterRegExp()和filterAcceptsRow()一起,python,qt,model,pyqt,Python,Qt,Model,Pyqt,在实现QSortFilterProxyModel(与QTableView一起使用)时,我通过在代理中定义一些自定义逻辑(关于如何过滤项),覆盖了代理的filterAcceptsRow()方法。现在看来,覆盖代理的“默认值”filterAcceptsRow()与内置代理围绕.setFilterRegExp()构建的功能冲突 在键入mySearchField时,我确实看到代理的filterAcceptsRow()不断被调用。但由于我使用自定义逻辑覆盖了它的filteraccessrow()方法,因此

在实现
QSortFilterProxyModel
(与
QTableView
一起使用)时,我通过在代理中定义一些自定义逻辑(关于如何过滤项),覆盖了代理的
filterAcceptsRow()
方法。现在看来,覆盖代理的“默认值”
filterAcceptsRow()
与内置代理围绕
.setFilterRegExp()构建的功能冲突

在键入
mySearchField
时,我确实看到代理的
filterAcceptsRow()
不断被调用。但由于我使用自定义逻辑覆盖了它的
filteraccessrow()
方法,因此不会对输入到lineedit中的文本进行过滤


问题:是否可以保留这两种功能:使用代理的内置
.setFilterRegExp()
和自定义的
filterAcceptsRow()
方法的简单性?

QSortFilterProxyModel
的构造函数中,首先声明
self.searchText
变量:

class TaskProxyModel(QSortFilterProxyModel):
    def __init__(self):
        super(TaskProxyModel, self).__init__()
        self.searchText=None
定义要链接到
lineedit
的代理的
setSearchText()
自定义setter(
lineedit
用于输入搜索关键字):

lineedit
链接到代理的
setSearchText()
setter方法:

myProxy=MyProxyModel()
lineEdit=QLineEdit()
lineEdit.textChanged.connect(myProxy.setSearchText)
在代理的
filterAcceptsRow()
开头,检查
self.searchText
是否为无。 如果没有,则执行一些逻辑:

class MyProxyModel(QSortFilterProxyModel):
    def __init__(self):
        super(MyProxyModel, self).__init__()
        self.searchText=None

    def filterAcceptsRow(self, rowProc, parentProc):
        sourceModel=self.sourceModel()      
        indexProc=sourceModel.index(rowProc, 0, parentProc)
        node=sourceModel.data(indexProc, Qt.UserRole).toPyObject()

        if self.searchText:
            nodeName=node.getName()
            if nodeName and not str(self.searchText).lower() in nodeName.lower():
                return False 
myProxy=MyProxyModel()
lineEdit=QLineEdit()
lineEdit.textChanged.connect(myProxy.setSearchText)
class MyProxyModel(QSortFilterProxyModel):
    def __init__(self):
        super(MyProxyModel, self).__init__()
        self.searchText=None

    def filterAcceptsRow(self, rowProc, parentProc):
        sourceModel=self.sourceModel()      
        indexProc=sourceModel.index(rowProc, 0, parentProc)
        node=sourceModel.data(indexProc, Qt.UserRole).toPyObject()

        if self.searchText:
            nodeName=node.getName()
            if nodeName and not str(self.searchText).lower() in nodeName.lower():
                return False