我的QListView
有一个QFileSystemModel
。根据{{1}}中的选择,QTreeView
显示文件夹的内容
现在我需要根据某些条件更改文件名的颜色。
最初的想法是迭代QListView中的项目,并根据条件是否满足来设置每个项目的颜色。然而,这似乎是不可能的,因为QListView
setData()
方法仅接受对QFileSystemModel
的更改,忽略了[看this]
EditRole
这也被指出here
后者的建议是将self.FileModel.setData(index, QtGui.QBrush(QtCore.Qt.red), role=QtCore.Qt.ForegroundRole)
子类化,以便为QListView中的项目着色。
因此,我将QItemDelegate
子类化,并重新实现其QStyledItemDelegate
方法,以绿色显示文件名,如果满足条件 - 这样可以正常工作。然而它现在看起来有点丑陋:文件图标丢失了" mouse_over"效果不再有效。
虽然这个子类化无论如何都是一个混乱的解决方法,但我的顶级问题是
paint()
的{{1}}中的项目着色?现在规定可能不是这种情况并且坚持QItemDelegate的子类化,
这是一个使用子类的最小代码,并显示了descibed行为。它使用QListView
,其中可以键入字符串,以便包含该字符串的所有文件都以绿色突出显示。
QFileSystemModel
这是它与QItemDelegate的子类化的比较:
这个代码的另一个问题是,一旦条件发生变化,就需要将鼠标移动到QFileView中以启动重新绘制。我想知道我可以使用哪个插槽连接到QLineEdit
信号来直接执行此操作。
答案 0 :(得分:3)
不需要项目代表。通过重新实现data
的{{1}}方法,可以更加简单地实现它:
QFileSystemModel