我尝试创建自己的QFileIconProvider
类,我想将其用于QFileSystemModel
。
我最终得到了这段代码:
class SeIconProvider(QtGui.QFileIconProvider):
def __init__(self):
QtGui.QFileIconProvider.__init__(self)
self.rsFileIcon = QtGui.QIcon(':images/rs-file.png')
self.otherFileIcon = QtGui.QIcon(':images/newfile.png')
self.folderIcon = QtGui.QIcon(':images/openFolder.png')
def icon(self, type):
if type == self.File:
return self.rsFileIcon
if type == self.Folder:
return self.folderIcon
return self.otherFileIcon
def icon(self, info):
if info.isFile():
return self.otherFileIcon
if info.isDir():
return self.folderIcon
return self.otherFileIcon
def type(self, info):
if info.isDir():
return 'Directory'
return 'File'
class FolderView(QtGui.QTreeView):
def __init__(self):
QtGui.QTreeView.__init__(self)
self.createComponents()
self.createLayout()
def createComponents(self):
self.model = QtGui.QFileSystemModel()
self.model.setIconProvider(SeIconProvider())
self.setModel(self.model)
def createLayout(self):
self.setHeaderHidden(True)
现在我的问题是,不仅树视图中没有显示图标,而且代码不会抛出任何异常。有人知道我做错了吗?
答案 0 :(得分:0)
我现在自己解决了这个问题....有点:D
我曾经以另一种方式编写自己的QFileSystemModel类。然后我覆盖了数据方法并返回了我自己的图标。我的代码如下所示:
class SeFileSystemModel(QtGui.QFileSystemModel):
def __init__(self):
QtGui.QFileSystemModel.__init__(self)
self.fileEndPattern = re.compile("^.*\.(\w{2,4})$")
def data(self, index, role):
if index.column() == 0 and role == QtCore.Qt.DecorationRole:
if self.fileEndPattern.match(index.data()) is not None:
if index.data().endswith('rs'):
return QtGui.QIcon(':icons/rs-file.png')
return QtGui.QIcon(':icons/newfile.png')
return QtGui.QIcon(':icons/openFolder.png')
return super(SeFileSystemModel, self).data(index, role)
class FolderView(QtGui.QTreeView):
def __init__(self):
QtGui.QTreeView.__init__(self)
self.createComponents()
def createComponents(self):
self.model = SeFileSystemModel()
self.setModel(self.model)
如果有人知道,为什么我的原始代码无效,我仍然会非常感谢答案:)