class QAbstractItemDelegate#

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

Inheritance diagram of PySide6.QtWidgets.QAbstractItemDelegate

继承自: QStyledItemDelegateQItemDelegate

概要#

方法#

虚方法#

信号#

备注

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

详细描述#

警告

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

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

QAbstractItemDelegate 类是模型/视图类之一,并是 Qt 的模型/视图框架的一部分。

要以自定义的方式渲染项,您必须实现 paint()sizeHint()QStyledItemDelegate 类为这些函数提供了默认实现;如果您不需要自定义渲染,则可以替代该类。

我们给出一个在项中绘制进度条的示例;在我们的案例中,为一个软件包管理程序。

../../_images/widgetdelegate.png

我们创建了继承自 QStyledItemDelegateWidgetDelegate 类。我们在 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() 来处理用户事件。

EndEditHint#

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

常量

描述

QAbstractItemDelegate.NoHint

没有推荐要执行的操作。

以下提示允许委托影响视图的行为

常量

描述

QAbstractItemDelegate.EditNextItem

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

QAbstractItemDelegate.EditPreviousItem

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

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

以下提示在用于缓存数据的模型中非常有用,例如为了提高性能或节省网络带宽而在本地操作数据的模型。

常量

描述

QAbstractItemDelegate.SubmitModelCache

如果模型缓存数据,则应将其写入到底层数据存储。

QAbstractItemDelegate.RevertModelCache

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

虽然模型和视图应该以适当的方式响应用户提示,但如果它们不相关,则自定义组件可以忽略任何或所有提示。

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

parentQObject

创建一个新的具有指定 parent 的抽象项代理。

closeEditor(editor[, hint=QAbstractItemDelegate.EndEditHint.NoHint])#
参数:

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

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

也见

EndEditHint

commitData(editor)#
参数:

editorQWidget

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

createEditor(parent, option, index)#
参数:
返回类型:

QWidget

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

基本实现返回 None。如果需要自定义编辑,则需要重写此函数。

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

也见

destroyEditor() setModelData() setEditorData()

destroyEditor(editor, index)#
参数:

当不再需要使用给定索引的index对数据项进行编辑时,将调用此函数销毁编辑器。默认行为是调用编辑器的deleteLater。例如,可以重新实现此函数来避免删除。

editorEvent(event, model, option, index)#
参数:
返回类型:

bool

当开始编辑项目时,此函数会带有关触发的编辑的eventmodel、项目的index以及用于渲染项目的option被调用。

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

基本实现返回false(表示它未处理事件)。

helpEvent(event, view, option, index)#
参数:
返回类型:

bool

每当出现帮助事件时,此函数都会与事件、事件对应的viewoption以及所属项目的索引一起调用。

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

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

也见

QHelpEvent

abstract paint(painter, option, index)#
参数:

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

如果您重写此方法,您还必须重写 sizeHint()

paintingRoles()#
返回类型:

整型列表

setEditorData(editor, index)#
参数:

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

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

setModelData(editor, model, index)#
参数:

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

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

abstract sizeHint(option, index)#
参数:
返回类型:

QSize

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

如果您重写此方法,您还必须重写 paint()

sizeHintChanged(arg__1)#
参数:

arg__1 - QModelIndex

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

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

updateEditorGeometry(editor, option, index)#
参数:

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

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