class QStyledItemDelegate#

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

Inheritance diagram of PySide6.QtWidgets.QStyledItemDelegate

概要#

方法#

虚拟方法#

注意

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

详细说明#

在Qt项视图中显示模型数据时,例如,QTableView,由代理绘制单独的项目。此外,当编辑项目时,它提供了一个编辑小部件,在编辑期间放在项视图的顶部。QStyledItemDelegate是所有Qt项视图的默认代理,并在创建时进行安装。

QStyledItemDelegate类是模型/视图类之一,并是Qt的模型/视图框架的一部分。该代理允许独立于模型和视图开发项目显示和编辑。

模型中项目的数据被赋予一个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::ForegroundRole

QBrush

编辑器是使用QItemEditorFactory创建的;由QItemEditorFactory提供的默认静态实例被安装在了所有项目代理上。您可以使用setItemEditorFactory()设置自定义工厂,或者使用setDefaultFactory()设置新的默认工厂。编辑的是项目模型中带有编辑角色的数据。参见QItemEditorFactory类,以获得对项目编辑器工厂的高级介绍。)QItemEditorFactory 实例说明如何使用工厂创建自定义编辑器。

继承自 QStyledItemDelegate链接到本标题

如果代理不支持您需要的绘图数据类型,或者您想要自定义项的绘图,您需要继承QStyledItemDelegate,并重新实现paint()和可能的sizeHint()。对于每个项,paint()函数将单独调用,通过sizeHint(),您可以为每个项指定提示。

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

复选框指示器的绘制是由当前样式完成的。样式还指定了绘制不同数据角色的宽度和边界矩形。由样式计算项目本身的边界矩形。因此,在绘制已支持的数据类型时,最好是请求样式这些边界矩形。在QStyle类描述中更详细地描述了这一点。

如果您想更改样式计算出的任何边界矩形或复选框指示器的绘制,可以继承QStyle。请注意,但是,通过重新实现sizeHint(),也会影响到项目的尺寸。

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

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

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

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

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

通过重新实现这些方法,星号代理 示例创建编辑器。

QStyledItemDelegate 与 QItemDelegate#

从 Qt 4.4 版本开始,有两种代理类:QItemDelegateQStyledItemDelegate 。然而,默认代理是 QStyledItemDelegate 。这两个类是绘画和为视图中的项提供编辑器时的独立替代方案。它们之间的区别在于 QStyledItemDelegate 使用当前样式绘制其项。因此,我们建议在实现自定义代理或在 Qt 风格表单中工作时使用 QStyledItemDelegate 作为基类。对于这两个类,所需的代码应相等,除非自定义代理需要使用样式进行绘画。

如果您想自定义项视图的绘画,则应实现自定义样式。请参阅 QStyle 类的文档以获取详细信息。

__init__([parent=None])#
参数:

parentQObject

使用给定的 parent 构造项代理。

displayText(value, locale)#
参数:
  • value – 对象

  • localeQLocale

返回类型:

字符串

此函数返回代表指定 locale 下模型 Qt::DisplayRole 的字符串。 value 是模型提供的 Qt::DisplayRole 的值。

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

对于空的模型索引,即模型返回无效 QVariant 的索引,该函数不会被调用。

另请参阅

data()

initStyleOption(option, index)#
参数:

使用给定索引 index 初始化 option。该方法对于子类很有用,当它们需要 QStyleOptionViewItem 但不想自己填充所有信息时。

另请参阅

initFrom()

itemEditorFactory()#
返回类型:

QItemEditorFactory

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

另请参阅

setItemEditorFactory()

setItemEditorFactory(factory)#
参数:

factoryQItemEditorFactory

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

另请参阅

itemEditorFactory()