使用QFileSystemModel或QAbstractItemModel在QTreeView中显示文件的自定义列表

2024-09-25 00:24:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在QTreeView中基于自定义文件浏览器构建一个开源PySide6应用程序。 我已经对QFileSystemModel进行了子类化,以显示包含一些额外数据的自定义列

现在,我的目标是在树状视图中显示文件的特定子集(它们可以位于不同的驱动器上)

为了简化事情,假设我有一个函数:

def files_to_display():
    return ['C:\file1', 'D:\file2', 'D:\file3']

现在我需要在我的QTreeView中显示这些文件。我试着用QSortFilterProxyModelfilterAcceptsRow过滤掉所有其他的东西,结果成功了。然而,在相对大量的文件上,它的速度非常慢,无法使用。我确信一个更简单的自定义文件树会工作得更快,因为afaikQFileSystemModel跟踪文件夹状态并运行其他我可以不用的额外内容

我不知道如何解决这个问题。 我基本上看到两种方式:

  1. QFileSystemModel中删掉我不需要的东西。 对于这个解决方案,我不完全理解我是如何做到这一点的。特别是,如何使用函数中的数据填充模型?它如何使用setRootPath

  2. 亚类QAbstractItemModel。 这个解决方案或多或少是清楚的,但是,它缺少了一些开箱即用的重要内容:我需要列和它提供的数据(名称、大小、类型、修改日期),我还需要与QFileIconProvider一起使用的文件/文件夹图标

因此,基本上我希望使用轻量级版本的QFileSystemModel,而不必查看文件系统和文件列表

我对其他解决办法持开放态度


Tags: 文件数据函数文件夹视图应用程序内容目标