QSortFilterProxyModel не применяет регистронезависимый

Поскольку я создал подкласс QSortFilterModel, чтобы иметь возможность выполнять поиск по нескольким столбцам в QListView, параметр CaseInsensitive больше не работает. Я попытался применить его следующим образом:

class CustomSortFilterProxyModel(QtCore.QSortFilterProxyModel):
    def __init__(self, parent=None):
        super(CustomSortFilterProxyModel, self).__init__(parent)
        self.filterString = ''
        self.filterFunctions = {} 
        self.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive) #Applied here



    def setFilterString(self, text):

        self.filterString = str(text)
        self.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)    #And applied here
        self.invalidateFilter()

    def filterAcceptsRow(self, row_num, parent):

        self.filterColumns = [1,3]    
        model = self.sourceModel()  
        row = model.row(row_num)
        tests = [self.filterString in row[col] for col in self.filterColumns]

        return True in tests 

Почему моя строка поиска чувствительна к регистру?


person Louvre    schedule 08.04.2017    source источник


Ответы (1)


Установленная вами чувствительность применяется только к реализации по умолчанию filterAcceptsRow. Если вы переопределите его, вам нужно будет справиться с этим самостоятельно, выполнив что-то вроде:

return any(self.filterString.casefold() in row[col].casefold() for col in self.filterColumns))

(см. документацию str.casefold)

person The Compiler    schedule 09.04.2017