gpt4 book ai didi

python - 如何使用 QStyledItemDelegate 呈现列的 QIcons?

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:27 24 4
gpt4 key购买 nike

我正在使用 QTableView 和 QSqlTableModel 来显示来自 sqlite DB 的数据。在数据库(和模型)中,有一列包含包含路径的字段,即:“/home/foo/bar.txt”或不包含任何路径。对于 View 中的这一列,我想为具有路径的项目呈现一个图标,为没有任何内容的项目呈现一个不同的图标(并且根本不在 View 中呈现实际的数据/路径)。
我认为我需要设置一个 QStyledItemDelegate 来渲染图标来代替数据,但是所包含示例中的 staritemdelelgate 突出显示了委托(delegate)的编辑器功能(我不想要),而没有任何亮点关于如何渲染 QIcons (或者也许我只是想念它)。我已经查看了 API,但我不清楚如何子类化 QStyledItemDelegate,或者即使我需要为这个用例进行子类化。
关于这是否是可行方法的一些指导,或者如何使用 QStyledItemDelegate 呈现列图标(最好在 python 中)的示例,我们将不胜感激。

编辑:Petr 的帖子解决了这个问题。基于 Petr 的解决方案,我描述的情况的完整实现是:

def data(self, index, role=QtCore.Qt.DisplayRole):  
if index.column() == 2:
if role == QtCore.Qt.DecorationRole:
filename = super(MovieModel, self).data(index, QtCore.Qt.DisplayRole)
if not filename == '':
return self.yes_icon
else:
return self.no_icon
elif role == QtCore.Qt.DisplayRole:
return ''
#Other columns/roles:
return super(MovieModel, self).data(index, role)

希望有帮助。

最佳答案

您可以对模型进行子类化,并在项目的 DecorationRole 中返回图标,而不是对委托(delegate)进行子类化。

未经测试的解决方案草图:

class IconModel(QSqlTableModel):
def data(self, index, role=Qt.DisplayRole):
if index.column() == FILENAME_COLUMN_INDEX:
if role == Qt.DecorationRole:
filename = super(IconModel, self).data(index, Qt.DisplayRole)
return icon_for_filename(filename)
elif role == Qt.DisplayRole:
return ''
# Other columns/roles:
return super(IconModel, self).data(index, role)

对委托(delegate)进行子类化更加痛苦。

关于python - 如何使用 QStyledItemDelegate 呈现列的 QIcons?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7941123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com