PyQt: фильтр флажка QFileSystemModel

Я пытаюсь создать утилиту с использованием python/pyqt для создания архива *.tar из QFileSystemModel (включая только те элементы, которые проверены). Теперь я хочу, чтобы контроль над флажками QFileSystemModel фильтровался с помощью fileName/fileType/fileSize.

Как я могу установить/снять флажки QFileSystemModel за пределами класса с поиском подстановочных знаков по имени файла/типу файла/размеру файла?

class CheckableDirModel(QtGui.QFileSystemModel):
    def __init__(self, parent=None):
        QtGui.QFileSystemModel.__init__(self, None)
        self.checks = {}

    def data(self, index, role=QtCore.Qt.DisplayRole):
        if role != QtCore.Qt.CheckStateRole:
            return QtGui.QFileSystemModel.data(self, index, role)
        else:
            if index.column() == 0:
                return self.checkState(index)

    def flags(self, index):
        return QtGui.QFileSystemModel.flags(self, index) | QtCore.Qt.ItemIsUserCheckable

    def checkState(self, index):
        if index in self.checks:
            return self.checks[index]
        else:
            return QtCore.Qt.Checked

    def setData(self, index, value, role):
        if (role == QtCore.Qt.CheckStateRole and index.column() == 0):
            self.checks[index] = value
            self.emit(QtCore.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
            return True 
        return QtGui.QFileSystemModel.setData(self, index, value, role)



    self.dirTreeView = QtGui.QTreeView(self.centralwidget)
    self.dirModel = CheckableDirModel()
    self.dirTreeView.setModel(self.dirModel)

См. снимок пользовательского интерфейса здесь


person Ruchit    schedule 06.11.2016    source источник
comment
Возможно ли это с помощью QSortFilterProxyModel или любой другой proxyModel??   -  person Ruchit    schedule 06.11.2016
comment
Поскольку вы используете древовидное представление, эти операции фильтрации необходимо будет применять рекурсивно, что будет очень затратным, особенно для размеров и дат. Обратите внимание, что также не рекомендуется кэшировать индексы модели, поскольку они могут стать недействительными при каждом обновлении модели.   -  person ekhumoro    schedule 06.11.2016
comment
Чтобы упростить задачу, я удалил элемент управления флажком и добавил QSortFilterProxyModel. qTreeView ‹-----› QSortFilterProxyModel ‹------› QFileSystemModel Теперь можно фильтровать qFileSystemModel через setFilterRegExp ?? как включать, так и исключать с именем файла, типом, размером, измененным ??   -  person Ruchit    schedule 07.11.2016