LINUX.ORG.RU

Сообщения max_tar

 

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

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

Нода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

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

 , ,

max_tar
()

RSS подписка на новые темы