无法沿自定义 QSortFilterProxy 使用 QFileSystemModel
Unable to use QFileSystemModel along custom QSortFilterProxy
我是 qt 的新手,正试图在 QTreeView
中隐藏一些目录。我正在尝试使用名为 CacheFilterProxy
.
的自定义 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
中,我尝试在树视图中提取当前所选项目的文件名和文件路径。文件名很容易检索,但检索文件路径会导致整个程序停止工作然后退出。
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)
这似乎是错误的。您的 fileModel
是来源,但我认为 index
是代理索引。我认为您必须先将其映射到源模型,然后才能在 fileModel
.
中使用它
def selectedFileChanged(self, proxyIndex):
sourceModel = self.fileTreeView.model().sourceModel()
sourceIndex = self.fileTreeView.model().mapToSource(proxyIndex)
sourceIndexCol0 = sourceModel.index(sourceIndex.row(), 0, sourceIndex.parent())
# this works normal
fileName = sourceModel.fileName(sourceIndexCol0)
# this breaks the entire program
filePath = sourceModel.filePath(sourceIndexCol0)
请注意,我将 indexItem
重命名为 sourceIndexCol0
,因为它是索引而不是项目。乍一看有点乱。
我无法测试上面的代码。如果它不起作用,请在使用之前验证索引是否有效并检查它们的模型 class.
我是 qt 的新手,正试图在 QTreeView
中隐藏一些目录。我正在尝试使用名为 CacheFilterProxy
.
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
中,我尝试在树视图中提取当前所选项目的文件名和文件路径。文件名很容易检索,但检索文件路径会导致整个程序停止工作然后退出。
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)
这似乎是错误的。您的 fileModel
是来源,但我认为 index
是代理索引。我认为您必须先将其映射到源模型,然后才能在 fileModel
.
def selectedFileChanged(self, proxyIndex):
sourceModel = self.fileTreeView.model().sourceModel()
sourceIndex = self.fileTreeView.model().mapToSource(proxyIndex)
sourceIndexCol0 = sourceModel.index(sourceIndex.row(), 0, sourceIndex.parent())
# this works normal
fileName = sourceModel.fileName(sourceIndexCol0)
# this breaks the entire program
filePath = sourceModel.filePath(sourceIndexCol0)
请注意,我将 indexItem
重命名为 sourceIndexCol0
,因为它是索引而不是项目。乍一看有点乱。
我无法测试上面的代码。如果它不起作用,请在使用之前验证索引是否有效并检查它们的模型 class.