PySide6.QtWidgets.QAbstractItemDelegate

class QAbstractItemDelegate

QAbstractItemDelegate 类用于显示和编辑模型中的数据项。更多

PySide6.QtWidgets.QAbstractItemDelegate 的继承图

继承者: QStyledItemDelegate, QItemDelegate

概要

方法

虚拟方法

信号

注意

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

详细描述

警告

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

一个QAbstractItemDelegate提供了模型/视图架构中委托的接口和通用功能。委托在视图中显示单个项目,并处理模型数据的编辑。

QAbstractItemDelegate 类是 Model/View Classes 之一,并且是 Qt 的 model/view framework 的一部分。

要以自定义方式渲染项目,您必须实现 paint()sizeHint()QStyledItemDelegate 类为这些函数提供了默认实现;如果您不需要自定义渲染,请改为继承该类。

我们给出了一个在项目中绘制进度条的示例;在我们的案例中,用于一个包管理程序。

../../_images/widgetdelegate.png

我们创建了WidgetDelegate类,它继承自QStyledItemDelegate。我们在paint()函数中进行绘制:

def paint(self, painter, option,):
                           QModelIndex index)

    if index.column() == 1:
        progress = index.data().toInt()
        progressBarOption = QStyleOptionProgressBar()
        progressBarOption.rect = option.rect
        progressBarOption.minimum = 0
        progressBarOption.maximum = 100
        progressBarOption.progress = progress
        progressBarOption.text = QString.number(progress) + "%"
        progressBarOption.textVisible = True
        QApplication.style().drawControl(QStyle.CE_ProgressBar,
                                           progressBarOption, painter)
    else:
        QStyledItemDelegate.paint(painter, option, index)

请注意,我们使用了QStyleOptionProgressBar并初始化了其成员。然后我们可以使用当前的QStyle来绘制它。

为了提供自定义编辑,可以使用两种方法。第一种方法是创建一个编辑器小部件并直接显示在项目上方。为此,您必须重新实现createEditor()以提供编辑器小部件,setEditorData()以用模型中的数据填充编辑器,以及setModelData()以便委托可以使用编辑器中的数据更新模型。

第二种方法是直接通过重新实现editorEvent()来处理用户事件。

class EndEditHint

此枚举描述了委托可以提供给模型和视图组件的不同提示,以便为用户在模型中编辑数据提供舒适的体验。

常量

描述

QAbstractItemDelegate.NoHint

没有推荐的操作需要执行。

这些提示让委托影响视图的行为:

常量

描述

QAbstractItemDelegate.EditNextItem

视图应使用委托在视图中的下一个项目上打开编辑器。

QAbstractItemDelegate.EditPreviousItem

视图应使用委托在视图中的上一个项目上打开编辑器。

请注意,自定义视图可能会以不同的方式解释“下一个”和“上一个”的概念。

当使用缓存数据的模型时,以下提示最为有用,例如那些为了提高性能或节省网络带宽而在本地操作数据的模型。

常量

描述

QAbstractItemDelegate.SubmitModelCache

如果模型缓存了数据,它应该将缓存的数据写入底层数据存储。

QAbstractItemDelegate.RevertModelCache

如果模型缓存了数据,它应该丢弃缓存的数据,并用底层数据存储中的数据替换它。

尽管模型和视图应该以适当的方式响应这些提示,但如果自定义组件与这些提示无关,它们可以忽略其中的任何或全部。

__init__([parent=None])
Parameters:

父对象QObject

使用给定的parent创建一个新的抽象项目委托。

closeEditor(editor[, hint=QAbstractItemDelegate.EndEditHint.NoHint])
Parameters:

当用户使用指定的editor完成编辑项目时,会发出此信号。

hint 提供了一种方式,让委托能够影响模型和视图在编辑完成后的行为。它向这些组件指示接下来应该执行什么操作,以便为用户提供舒适的编辑体验。例如,如果指定了 EditNextItem,视图应该使用委托在模型中的下一个项目上打开编辑器。

另请参阅

EndEditHint

commitData(editor)
Parameters:

编辑器QWidget

editor小部件完成数据编辑并希望将其写回模型时,必须发出此信号。

createEditor(parent, option, index)
Parameters:
Return type:

QWidget

返回用于编辑具有给定index的数据项的编辑器。请注意,索引包含有关所使用的模型的信息。编辑器的父部件由parent指定,项目选项由option指定。

基础实现返回 None。如果您想要自定义编辑,您需要重新实现此函数。

返回的编辑器小部件应具有Qt::StrongFocus;否则,小部件接收到的QMouseEvents将传播到视图。除非编辑器绘制自己的背景(例如,使用setAutoFillBackground()),否则视图的背景将透过来。

destroyEditor(editor, index)
Parameters:

当不再需要使用editor来编辑具有给定index的数据项时调用,并且应该销毁它。默认行为是在编辑器上调用deleteLater。例如,可以通过重新实现此函数来避免此删除。

另请参阅

createEditor()

editorEvent(event, model, option, index)
Parameters:
Return type:

布尔

当开始编辑一个项目时,此函数会被调用,并传入触发编辑的eventmodel、项目的index以及用于渲染项目的option

即使鼠标事件没有开始编辑项目,它们也会被发送到editorEvent()。例如,如果您希望在项目上按下鼠标右键时打开上下文菜单,这可能很有用。

基础实现返回 false(表示它没有处理该事件)。

helpEvent(event, view, option, index)
Parameters:
Return type:

布尔

每当发生帮助事件时,都会调用此函数,并传入与事件发生项对应的event view optionindex

如果委托可以处理事件,则返回 true;否则返回 false。返回值为 true 表示使用索引获取的数据具有所需的角色。

对于成功处理的QEvent::ToolTip和QEvent::WhatsThis事件,根据用户的系统配置,可能会显示相关的弹出窗口。

另请参阅

QHelpEvent

abstract paint(painter, option, index)
Parameters:

如果您想提供自定义渲染,则必须重新实现此纯抽象函数。使用 painter 和样式 option 来渲染由项目 index 指定的项目。

如果你重新实现这个,你也必须重新实现 sizeHint()

paintingRoles()
Return type:

整数列表

setEditorData(editor, index)
Parameters:

将给定editor的内容设置为给定index处项目的数据。请注意,索引包含有关正在使用的模型的信息。

基础实现不执行任何操作。如果您想要自定义编辑,您需要重新实现此函数。

另请参阅

setModelData()

setModelData(editor, model, index)
Parameters:

将给定index处的项目的数据设置为给定editor的内容。

基础实现不执行任何操作。如果您想要自定义编辑,您需要重新实现此函数。

另请参阅

setEditorData()

abstract sizeHint(option, index)
Parameters:
Return type:

QSize

如果您想提供自定义渲染,则必须重新实现此纯抽象函数。选项由option指定,模型项由index指定。

如果你重新实现这个,你也必须重新实现 paint()

sizeHintChanged(index)
Parameters:

索引QModelIndex

indexsizeHint()发生变化时,必须发出此信号。

视图会自动连接到这个信号,并在必要时重新布局项目。

updateEditorGeometry(editor, option, index)
Parameters:

根据option中指定的矩形,更新具有给定index的项目的editor的几何形状。如果项目有内部布局,编辑器将相应地布局。请注意,索引包含有关所使用的模型的信息。

基础实现不执行任何操作。如果您想要自定义编辑,必须重新实现此函数。