2017-04-08 5 views
0

Da ich QSortFilterModel subclassiert habe, um mehrere Spalten in einer QListView durchsuchen zu können, funktioniert die Option CaseInsensitive nicht mehr. Ich habe versucht, sie anzuwenden, wie folgt:QSortFilterProxyModel trifft nicht zu 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 

Wie String meiner Suche kommen Groß- und Kleinschreibung?

Antwort

1

Die von Ihnen festgelegte Empfindlichkeit gilt nur für die Standardimplementierung filterAcceptsRow. Wenn Sie es überschreiben, müssen Sie dies selbst zu handhaben, von etwas zu tun, wie:

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

(siehe den str.casefold docs)

+0

Dank, arbeitete das sehr gut! – Louvre

Verwandte Themen