Фильтрация QTreeView с QSortFilterProxyModel

Рейтинг: 3Ответов: 1Опубликовано: 06.04.2015

Есть дерево вида:

Нода1

--Нода2

----Нода3 Значение1 Значение2

----Нода4 Значение3 Значение4

И так далее...

(Внешний вид дерева в прикрепленном файле) введите описание изображения здесь

Мне надо отфильтровать модель по различающимся значениям в одной строке.
То есть, если Значение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
            if (self.hasAcceptedChildren(i, sourceIndex)):
                return True

        return False

Он рекурсивно сравнивает значения в первом столбце (использую для поиска). А мне требуется, чтобы сравнение шло по всем столбцам, кроме первого.

Ответы

Ответов пока нет.