如何在 PyQt5 QFileIconProvider 中为打开的文件夹添加图标

How to add icon for a opened folder in PyQt5 QFileIconProvider

我知道要为未打开但未打开的普通文件夹添加图标 如何为打开的文件夹添加图标

这是我当前的代码

class FileIconProvider(QFileIconProvider):
    def icon(self, parameter):
  
        if isinstance(parameter, QFileInfo):
            info = parameter
            if info.isDir():
                #if it is folder then
                return QIcon("icons/folder.svg")
                #but how to check whether the folder is opened and give icon for it? 
        return super(FileIconProvider, self).icon(parameter)

每当索引展开时,QTreeView 都会将项目的样式选项设置为 State_Open,委托将其用于 select 适当的图标 state.

解决方案是将新文件添加到具有该状态的现有图标:

class FileIconProvider(QFileIconProvider):
    def icon(self, parameter):
        if isinstance(parameter, QFileInfo):
            if parameter.isDir():
                icon = QIcon("icons/folder.svg")
                icon.addFile("icons/folder-open.svg", state=icon.On)
                return icon
        return super().icon(parameter)

请注意,虽然这通常适用于任何地方,但不能绝对保证当前样式或委托尊重它,如果它不起作用,您需要设置自定义委托并更改选项图标initStyleOption().