我正在构建一个基于自定义文件浏览器的开源 PySide6 应用程序QTreeView
。我已经进行了子类QFileSystemModel
化以显示带有一些额外数据的自定义列。
现在我的目标是在树视图中显示特定的文件子集(它们可以位于不同的驱动器上)。
为了简化事情想象我有一个功能:
def files_to_display():
return ['C:\file1', 'D:\file2', 'D:\file3']
现在我需要在我的QTreeView
. 我尝试使用QSortFilterProxyModel
andfilterAcceptsRow
过滤掉其他所有东西,它起作用了。但是,在相对大量的文件上,它非常缓慢且无法使用。我很确定更简单的自定义文件树会运行得更快,因为 afaik 会QFileSystemModel
跟踪文件夹状态并运行其他我可以不用的额外内容。
我不知道如何解决这个问题。我基本上看到了两种方式:
以某种方式从
QFileSystemModel
. 有了这个解决方案,我不完全理解我是如何做到这一点的。特别是,如何用我的函数中的数据填充模型?它如何使用setRootPath
?子类
QAbstractItemModel
。这个解决方案或多或少很清楚,但是,它缺少一些QFileSystemModel
开箱即用的重要东西:我需要它提供的列和数据(名称、大小、类型、修改日期),我还需要文件/我使用的文件夹图标QFileIconProvider
。
所以基本上我想使用一个轻量级的版本QFileSystemModel
而不看文件系统和我的文件列表。
我对替代解决方案持开放态度。