无论文件如何,QFileIconProvider 返回相同的图标
Posted
技术标签:
【中文标题】无论文件如何,QFileIconProvider 返回相同的图标【英文标题】:QFileIconProvider returns the same icon regardless of file 【发布时间】:2015-02-19 10:09:53 【问题描述】:我正在使用 PySide(包装 Qt 4.8 框架)开发一个应用程序。我需要显示与某些文件扩展名关联的应用程序图标,为此我使用QFileIconProvider
。在 Windows 上,我的代码运行良好 - 每个文件扩展名都与相应应用程序的图标一起显示。但是,在 Linux Ubuntu (14.04.1) 上,对于我尝试的所有文件扩展名,相同的代码会显示未知文件扩展名的图标。
有人知道为什么会这样吗?代码如下:
from PySide import QtCore, QtGui
# Use the appropriate path module when running on Windows.
path = None
import os
if os.name == "nt":
path = __import__("ntpath")
else:
path = os.path
class MyWidget(QtGui.QWidget):
def __init__(self, *args, **kwargs):
# ...
# ...
self.file_ext_to_icon =
def get_icon(self, fpath):
_, file_ext = path.splitext(fpath)
file_ext = file_ext.replace(".", "")
if file_ext in self.file_ext_to_icon:
return self.file_ext_to_icon[file_ext]
if path.exists(fpath):
icon = QtGui.QFileIconProvider().icon(QtCore.QFileInfo(fpath))
else:
temp_fpath = path.join(os.getcwd(), "myappname_temp.%s" % file_ext)
if not path.exists(temp_fpath):
with open(temp_fpath, "wb") as _:
pass
icon = QtGui.QFileIconProvider().icon(QtCore.QFileInfo(temp_fpath))
os.remove(temp_fpath)
if icon.isNull():
# Use a custom default file icon from the resources file. Note that
# this is different from the default file icon given by the OS.
icon = QtGui.QIcon(":images/default_file_icon.png")
self.file_ext_to_icon[file_ext] = icon
return icon
【问题讨论】:
我也遇到了同样的问题。这是因为 Qt/Gtk 集成。 Qt 应用程序在 Gtk 桌面上不是“原生的”(在主题、图标、光标等方面)。例如,在 KDE 上问题应该会消失,因为 KDE 是基于 Qt 的。 【参考方案1】:我遇到了同样的问题,经过大量挖掘后,我最终做了...
class IconProvider(QtWidgets.QFileIconProvider):
def __init__(self):
super().__init__()
self.mimeDatabase = QtCore.QMimeDatabase()
def icon(self, info: QtCore.QFileInfo):
mimeType = self.mimeDatabase.mimeTypeForFile(info)
return QtGui.QIcon.fromTheme(mimeType.iconName())
...used in my class
self.filesModel = QtWidgets.QFileSystemModel(self.filesView)
self.filesModel.setIconProvider(IconProvider())
...or in your case
icon = IconProvider().icon(QtCore.QFileInfo(fpath))
【讨论】:
这仅适用于 linux 对吗? @ManuelSchneid3r 除了 Linux,我没有尝试过其他任何东西。以上是关于无论文件如何,QFileIconProvider 返回相同的图标的主要内容,如果未能解决你的问题,请参考以下文章