Ich bin neu in qt und versuche, einige Verzeichnisse in einer QTreeView
zu verstecken. Ich versuche, einige Ordner basierend auf ihren Namen mit einem benutzerdefinierten QSortFilterProxy
namens CacheFilterProxy
zu verstecken.QFileSystemModel konnte nicht zusammen mit benutzerdefiniertem QSortFilterProxy verwendet werden
ich Setup sehen den Baum auf diese Weise:
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)
und dann in self.selectedFileChanged
ich versuche, Dateinamen und Dateipfad der aktuell ausgewählte Element in der Baumansicht zu extrahieren. Der Name der Datei wird leicht abgerufen, aber das Abrufen des Dateipfads führt dazu, dass das gesamte Programm nicht mehr funktioniert und dann beendet wird.
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)
Nun, es schien ziemlich offensichtlich, und ich dachte bereits, dass ich es getan habe (weil ich das gleiche in der Filtermethode), aber einige, wie ich es vergessen habe, es zu tun. Und es ist überraschend, dass das Abrufen des Dateinamens zuvor funktioniert hat. – Mehraban