Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QFileIconProvider返回相同的图标,而不考虑文件_C++_Qt_Python 2.7_Pyside - Fatal编程技术网

C++ QFileIconProvider返回相同的图标,而不考虑文件

C++ QFileIconProvider返回相同的图标,而不考虑文件,c++,qt,python-2.7,pyside,C++,Qt,Python 2.7,Pyside,我正在使用PySide(包装Qt4.8框架)开发一个应用程序。我需要显示与某些文件扩展名关联的应用程序的图标,我正在为此使用QFileIconProvider。在Windows上,我的代码工作得非常好——每个文件扩展名都会与相应应用程序的图标一起显示。但是,在Linux Ubuntu(14.04.1)上,对于我尝试的所有文件扩展名,相同的代码都会显示未知文件扩展名的图标 有人知道为什么会这样吗?代码如下: from PySide import QtCore, QtGui # Use the a

我正在使用PySide(包装Qt4.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

我也有同样的问题,在这里挖掘了很多之后,我最终做的就是

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))

我也遇到了同样的问题。这是因为Qt/Gtk集成。Qt应用程序不是Gtk桌面上的“本机”应用程序(在主题、图标、光标等方面)。例如,KDE上的问题应该消失,因为KDE基于Qt。