У меня есть дерево, как это:Фильтрация QTreeView с QSortFilterProxyModel
заголовка 1 header2 header3
node1
--node2
---- node3 значение1 значение2
- --- node4 value3 value4
И т.д. ...
Мне нужно отфильтровать модель для разных значений в той же строке. То есть, если значение1 является одинаковым (равным) со значением2, то пропустите эту строку, если нет - отобразите.
Существует некоторый пример кода:
class FindFilterProxyModel(QtCore.QSortFilterProxyModel):
def filterAcceptsRow(self, source_row, source_parent):
if (self.filterAcceptsRowItself(source_row, source_parent)):
return True
if (self.hasAcceptedChildren(source_row, source_parent)):
return True
return False
def filterAcceptsRowItself(self, source_row, source_parent):
return super(FindFilterProxyModel, self).\
filterAcceptsRow(source_row, source_parent)
def hasAcceptedChildren(self, source_row, source_parent):
model = self.sourceModel()
sourceIndex = model.index(source_row, 0, source_parent)
if not (sourceIndex.isValid()):
return False
childCount = model.rowCount(sourceIndex)
if (childCount == 0):
return False
for i in range (childCount):
if (self.filterAcceptsRowItself(i, sourceIndex)):
return True
# recursive call -> NOTICE that this is depth-first searching,
# you're probably better off with breadth first search...
if (self.hasAcceptedChildren(i, sourceIndex)):
return True
return False
рекурсивно сравнивает значения в первом столбце (используется для поиска). И я хочу сравнить это со всеми столбцами, кроме первого.
Вы сказали, что хотите, и предоставили некоторый код. Но каков ваш вопрос? Как я могу вам помочь? –
Обратите внимание, что этот подход с фильтрацией родителей по свойствам их детей является хрупким, как только дети изменяются; из того, что я помню, filterAcceptsRow не будет вызываться для родителя снова, когда ребенок изменится, поэтому его состояние фильтра не будет обновлено. –
@three_pineapples «Мне нужно отфильтровать модель для разных значений в той же строке. То есть, если значение1 одинаково (равно) со значением2, пропустите эту строку, если нет - отобразить». –