我正在尝试为目录中的文件夹项目添加文件夹图标,沿着关联文件类型的图标。
iconProvider = QFileIconProvider()
for item in os.listdir(path):
QItem = QStandardItem(item)
file_item_icon = iconProvider.icon(QFileInfo(item))
QItem.setIcon(file_item_icon)
root_item.appendRow(QItem)
文件夹显示为白色图标时的QTreeView
我试过使用QFileSystemModel,它确实正确地显示了图标,但是,我需要QStandardItemModel提供的控件...
图标工作的QTreeView
1条答案
按热度按时间ecfsfe2w1#
如果用于构造QFileInfo示例的路径不是绝对路径,则只能使用相对路径。
QFileInfo可以指向一个具有相对或绝对文件路径的文件。绝对文件路径以目录分隔符“/”开始(或在Windows上以驱动器规格开头)。相对文件名以目录名或文件名开头,并指定相对于当前工作目录的路径**。
[着重号是我的]
os.listdir()
仅返回 * 名称 *:返回一个列表,其中包含path指定的目录中的条目名称。
这意味着QFileInfo将只有基于 * 工作目录 * 的每个条目的“相对”名称。
这显然是您的问题:
os.listdir()
返回的路径与工作目录的现有名称一致,它甚至可能提供 wrong 图标:假设你在工作目录下有一个something.doc
文件,os.listdir()
返回的文件名也是something.doc
,它会有前一个文件的图标,即使后一个文件实际上是一个目录;因此,解决方案是使用绝对路径 * 或 * 适当的图标类型。
对于简单的情况(当图标类型已知时),您可以使用
icon(IconType)
覆盖,使用提供的枚举。例如,如果您 do 知道路径指向一个目录(即os.path.isdir()
):否则,您应该使用完整路径,以便QFileInfo将使用 * 真实的 * 文件引用: