1

我正在尝试制作一个 pyqt 应用程序,它检查目录结构和其中的文件。我想要做的是向 qfilesystemmodel 中的项目添加一些额外的信息,例如,将文件标记为“已检查”或“未检查”。我发现模型中的每个项目(文件或文件夹)都有四列,名称、大小、时间戳和类型。是否可以使项目具有第五列,其中将包含自定义信息(标签)?或者,有什么方法可以注释模型中项目的额外信息?如果没有,我想我必须有另一个模型,例如 qstanarditemmodel,来保留标签。但我不希望它采用分离模型。谢谢!

4

2 回答 2

0

简而言之,不,不容易。QFileSystemModelQt 开发人员出于复杂性的原因停止了工作。基本上,后端文件系统引擎过于复杂和脆弱,QFileSystemModel完全依赖它。

可以重新实现QFileSystemModel,但这需要大量痛苦的工作并访问私有标头。

于 2016-07-14T18:43:03.500 回答
0

该类QFileSystemModel委托给一个实时文件系统。所以它实际上并不包含任何可以添加信息的项目。这些项目实际上是文件系统内的文件和目录。

鉴于此,将需要第二个数据结构来保存附加信息。否则,您需要以某种方式将信息存储在文件和目录本身中。这对于某些文件类型(例如图像)可能是可能的。但是对于任意文件类型这样做显然是不可行的。

应该可以对常用方法QFileSystemModel进行子类化和重新实现,以便可以添加额外的列。作为最低限度,您需要重新实现-但显然您如何执行此操作的确切细节将取决于您选择保存附加信息的数据结构。非常粗略,它可能看起来像这样:columnCount()data()

class FileSystemModel(QFileSystemModel):
    def __init__(self, parent=None):
        super(FileSystemModel, self).__init__(parent)
        self._data = DataStructure()

    def columnCount(self, parent):
        return super(FileSystemModel, self).columnCount(parent) + 1

    def data(self, index, role):
        if index.isValid() and index.column() == self.columnCount() - 1:
            if role == QtCore.Qt.DisplayRole:
                # return the relevant additional data
            elif role == QtCore.Qt.CheckStateRole:
                # etc, etc
        else:        
            return super(FileSystemModel, self).data(index,role)
于 2016-07-14T20:06:15.700 回答