Я новичок в qt и пытаюсь скрыть некоторые каталоги в QTreeView
. Я пытаюсь скрыть некоторые папки на основе их имен, используя пользовательский QSortFilterProxy
с именем CacheFilterProxy
.Невозможно использовать QFileSystemModel вдоль настраиваемого QSortFilterProxy
Я настроить дерево просмотра таким образом:
fileModel = QtGui.QFileSystemModel()
rootIndex = fileModel.setRootPath(rootDir)
fileModel.setFilter(QtCore.QDir.Dirs | QtCore.QDir.NoDotAndDotDot)
fileModel.setNameFilters([patternString])
model = CacheFilterProxy()
model.setSourceModel(fileModel)
self.fileTreeView.setModel(model)
self.fileTreeView.setRootIndex(model.mapFromSource(rootIndex))
self.fileTreeView.clicked.connect(self.selectedFileChanged)
, а затем, в self.selectedFileChanged
я пытаюсь извлечь FileName и Filepath текущего пункта в дереве. Имя файла будет легко восстановлено, но получение пути к файлу приведет к прекращению работы всей программы и последующему завершению работы.
def selectedFileChanged(self, index):
fileModel = self.fileTreeView.model().sourceModel()
indexItem = self.fileTreeView.model().index(index.row(), 0, index.parent())
# this works normal
fileName = fileModel.fileName(indexItem)
# this breaks the entire program
filePath = fileModel.filePath(indexItem)
Ну, это казалось довольно очевидным, и я уже думал, что я это сделал (потому что я сделал то же самое в методе фильтрации), но некоторые, как я забыл это сделать. И неудивительно, что ранее было загружено имя файла. – Mehraban