2013-08-07 65 views
0

我试图创建我自己的QFileIconProvider类,我想用QFileSystemModel。 我结束了这段代码:Python/Pyside:自己的QFileIconProvider实现失败,没有抛出任何异常

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

我自己现在解决了这个问题....还挺: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) 

如果有谁知道,为什么我的原代码不工作,我仍然会约一个答案非常感谢:)

相关问题