我正在尝试创建一个pyqt应用程序,它会检查目录结构及其中的文件。 我想要做的是为qfilesystemmodel中的项添加一些额外的信息,例如,将文件标记为“已检查”或“未选中”。 我发现模型中的每个项目(文件或文件夹)都有四列,名称,大小,时间戳和类型。 是否可以使该项目具有第五列,其中包含自定义信息(标签)? 或者,有没有办法注释模型中的项目的额外信息? 如果没有,我想我必须有另一个模型,如qstanarditemmodel,以保留标签。但我不希望它处于一个模糊的模型中。 谢谢!
答案 0 :(得分:0)
总之,不,不容易。由于复杂性原因,Qt开发人员停止了QFileSystemModel
的工作。基本上,后端文件系统引擎过于复杂和脆弱,QFileSystemModel
完全依赖它。
你可以重新实现QFileSystemModel
,但这需要很多的痛苦工作并访问私有标题。
答案 1 :(得分:0)
QFileSystemModel
类委托实时文件系统。所以它并不真正包含您可以添加信息的任何项目。这些项实际上是文件系统中的文件和目录。
鉴于此,接下来需要第二个数据结构来保存附加信息。否则,您需要以某种方式将信息存储在文件和目录中。对于某些文件类型(例如图像),这可能是可能的。但是对任意文件类型执行此操作显然是不可行的。
应该可以对QFileSystemModel
和reimplement the usual methods进行子类化,以便可以添加额外的列。作为最低要求,您需要重新实现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)