PySide6.QtWidgets.QStyledItemDelegate

class QStyledItemDelegate

QStyledItemDelegate 类为模型中的数据项提供了显示和编辑功能。更多

PySide6.QtWidgets.QStyledItemDelegate 的继承图

概要

方法

虚拟方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

在Qt项目视图中显示模型数据时,例如QTableView,各个项目由委托绘制。此外,当编辑项目时,它提供一个编辑器小部件,该小部件在编辑时放置在项目视图的顶部。QStyledItemDelegate是所有Qt项目视图的默认委托,并在创建时安装到它们上。

QStyledItemDelegate 类是 Model/View Classes 之一,属于 Qt 的 model/view framework。该委托允许独立于模型和视图开发和显示和编辑项目。

模型中的项目数据被分配了一个ItemDataRole;每个项目可以为每个角色存储一个QVariant。QStyledItemDelegate实现了用户期望的最常见数据类型的显示和编辑,包括布尔值、整数和字符串。

数据将根据它们在模型中的角色以不同的方式绘制。下表描述了角色以及委托可以为每个角色处理的数据类型。通常,确保模型为每个角色返回适当的数据以确定视图中项目的外观就足够了。

角色

接受的类型

Qt::BackgroundRole

QBrush

Qt::CheckStateRole

Qt::CheckState

Qt::DecorationRole

QIcon, QPixmap, QImage 和 QColor

Qt::DisplayRole

QString 和具有字符串表示形式的类型

Qt::EditRole

详情请参见 QItemEditorFactory

Qt::FontRole

QFont

Qt::SizeHintRole

QSize

Qt::TextAlignmentRole

Qt::Alignment

Qt::前景角色

QBrush

编辑器是通过QItemEditorFactory创建的;由QItemEditorFactory提供的默认静态实例安装在所有项目委托上。您可以使用setItemEditorFactory()设置自定义工厂,或使用setDefaultFactory()设置新的默认工厂。

editorFactory = QItemEditorFactory()
creator = QStandardItemEditorCreator()<MyFancyDateTimeEdit>()
editorFactory.registerEditor(QMetaType.QDateTime, creator)
QItemEditorFactory.setDefaultFactory(editorFactory)

新工厂设置后,所有标准项目委托都将使用它(即,在新默认工厂设置之前创建的委托也将使用它)。

这是使用EditRole存储在项目模型中的数据。有关项目编辑器工厂的更高级介绍,请参见QItemEditorFactory类。

子类化 QStyledItemDelegate

如果委托不支持您需要的数据类型的绘制,或者您想自定义项目的绘制,您需要子类化QStyledItemDelegate,并重新实现paint()和可能的sizeHint()paint()函数为每个项目单独调用,而使用sizeHint(),您可以指定每个项目的提示。

当重新实现 paint() 时,通常会处理想要绘制的数据类型,并使用超类实现来处理其他类型。

复选框指示器的绘制由当前样式执行。样式还指定了大小和边界矩形,用于绘制不同数据角色的数据。项目本身的边界矩形也由样式计算。因此,在绘制已经支持的数据类型时,向样式询问这些边界矩形是一个好主意。QStyle类描述中对此有更详细的说明。

如果您希望更改由样式或复选框指示器的绘制计算的任何边界矩形,您可以子类化 QStyle。但请注意,项目的大小也可以通过重新实现 sizeHint() 来影响。

自定义委托可以在不使用编辑器项工厂的情况下提供编辑器。在这种情况下,必须重新实现以下虚函数:

  • createEditor() 返回用于从模型中更改数据的小部件,并且可以重新实现以自定义编辑行为。

  • setEditorData() 为小部件提供要操作的数据。

  • updateEditorGeometry() 确保编辑器相对于项目视图正确显示。

  • setModelData() 返回更新后的数据到模型。

Star Delegate 示例通过重新实现这些方法来创建编辑器。

QStyledItemDelegate 与 QItemDelegate

自 Qt 4.4 起,有两个委托类:QItemDelegateQStyledItemDelegate。然而,默认的委托是 QStyledItemDelegate。这两个类是独立的替代方案,用于绘制和提供视图中的项目编辑器。它们之间的区别在于 QStyledItemDelegate 使用当前样式来绘制其项目。因此,我们建议在实现自定义委托或使用 Qt 样式表时,使用 QStyledItemDelegate 作为基类。除非自定义委托需要使用样式进行绘制,否则这两个类所需的代码应该是相同的。

如果您希望自定义项目视图的绘制,您应该实现一个自定义样式。详情请参阅QStyle类文档。

另请参阅

委托类 QItemDelegate QAbstractItemDelegate QStyle 星型委托示例

__init__([parent=None])
Parameters:

父对象QObject

使用给定的 parent 构造一个项目委托。

displayText(value, locale)
Parameters:
  • value – 对象

  • localeQLocale

Return type:

字符串

此函数返回委托将用于显示模型中locale的Qt::DisplayRole的字符串。value是模型提供的Qt::DisplayRole的值。

默认实现使用QLocale::toString将value转换为QString。

此函数不会为空的模型索引调用,即模型返回无效 QVariant 的索引。

另请参阅

data()

initStyleOption(option, index)
Parameters:

使用索引 index 的值初始化 option。当子类需要 QStyleOptionViewItem 但不想自己填写所有信息时,此方法非常有用。

另请参阅

initFrom()

itemEditorFactory()
Return type:

QItemEditorFactory

返回项目委托使用的编辑器工厂。如果未设置编辑器工厂,函数将返回null。

另请参阅

setItemEditorFactory()

setItemEditorFactory(factory)
Parameters:

工厂QItemEditorFactory

设置项目委托使用的编辑器工厂为指定的factory。如果未设置编辑器工厂,项目委托将使用默认的编辑器工厂。

另请参阅

itemEditorFactory()