PySide6.QtWidgets.QAbstractItemDelegate¶
- class QAbstractItemDelegate¶
QAbstractItemDelegate类用于显示和编辑模型中的数据项。更多…继承者:
QStyledItemDelegate,QItemDelegate概要¶
方法¶
def
__init__()
虚拟方法¶
def
createEditor()def
destroyEditor()def
editorEvent()def
helpEvent()def
paint()def
paintingRoles()def
setEditorData()def
setModelData()def
sizeHint()
信号¶
def
closeEditor()def
commitData()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
一个
QAbstractItemDelegate提供了模型/视图架构中委托的接口和通用功能。委托在视图中显示单个项目,并处理模型数据的编辑。QAbstractItemDelegate类是 Model/View Classes 之一,并且是 Qt 的 model/view framework 的一部分。要以自定义方式渲染项目,您必须实现
paint()和sizeHint()。QStyledItemDelegate类为这些函数提供了默认实现;如果您不需要自定义渲染,请改为继承该类。我们给出了一个在项目中绘制进度条的示例;在我们的案例中,用于一个包管理程序。
我们创建了
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
如果模型缓存了数据,它应该丢弃缓存的数据,并用底层数据存储中的数据替换它。
尽管模型和视图应该以适当的方式响应这些提示,但如果自定义组件与这些提示无关,它们可以忽略其中的任何或全部。
使用给定的
parent创建一个新的抽象项目委托。- closeEditor(editor[, hint=QAbstractItemDelegate.EndEditHint.NoHint])¶
- Parameters:
editor –
QWidget提示 –
EndEditHint
当用户使用指定的
editor完成编辑项目时,会发出此信号。hint提供了一种方式,让委托能够影响模型和视图在编辑完成后的行为。它向这些组件指示接下来应该执行什么操作,以便为用户提供舒适的编辑体验。例如,如果指定了EditNextItem,视图应该使用委托在模型中的下一个项目上打开编辑器。另请参阅
当
editor小部件完成数据编辑并希望将其写回模型时,必须发出此信号。- createEditor(parent, option, index)¶
- Parameters:
parent –
QWidgetoption –
QStyleOptionViewItemindex –
QModelIndex
- Return type:
返回用于编辑具有给定
index的数据项的编辑器。请注意,索引包含有关所使用的模型的信息。编辑器的父部件由parent指定,项目选项由option指定。基础实现返回
None。如果您想要自定义编辑,您需要重新实现此函数。返回的编辑器小部件应具有Qt::StrongFocus;否则,小部件接收到的QMouseEvents将传播到视图。除非编辑器绘制自己的背景(例如,使用
setAutoFillBackground()),否则视图的背景将透过来。- destroyEditor(editor, index)¶
- Parameters:
editor –
QWidgetindex –
QModelIndex
当不再需要使用
editor来编辑具有给定index的数据项时调用,并且应该销毁它。默认行为是在编辑器上调用deleteLater。例如,可以通过重新实现此函数来避免此删除。另请参阅
- editorEvent(event, model, option, index)¶
- Parameters:
event –
QEventmodel –
QAbstractItemModel选项 –
QStyleOptionViewItemindex –
QModelIndex
- Return type:
布尔
当开始编辑一个项目时,此函数会被调用,并传入触发编辑的
event、model、项目的index以及用于渲染项目的option。即使鼠标事件没有开始编辑项目,它们也会被发送到editorEvent()。例如,如果您希望在项目上按下鼠标右键时打开上下文菜单,这可能很有用。
基础实现返回
false(表示它没有处理该事件)。- helpEvent(event, view, option, index)¶
- Parameters:
事件 –
QHelpEvent视图 –
QAbstractItemView选项 –
QStyleOptionViewItemindex –
QModelIndex
- Return type:
布尔
每当发生帮助事件时,都会调用此函数,并传入与事件发生项对应的
eventviewoption和index。如果委托可以处理事件,则返回
true;否则返回false。返回值为 true 表示使用索引获取的数据具有所需的角色。对于成功处理的QEvent::ToolTip和QEvent::WhatsThis事件,根据用户的系统配置,可能会显示相关的弹出窗口。
另请参阅
- abstract paint(painter, option, index)¶
- Parameters:
画家 –
QPainter选项 –
QStyleOptionViewItemindex –
QModelIndex
如果您想提供自定义渲染,则必须重新实现此纯抽象函数。使用
painter和样式option来渲染由项目index指定的项目。如果你重新实现这个,你也必须重新实现
sizeHint()。- paintingRoles()¶
- Return type:
整数列表
- setEditorData(editor, index)¶
- Parameters:
editor –
QWidgetindex –
QModelIndex
将给定
editor的内容设置为给定index处项目的数据。请注意,索引包含有关正在使用的模型的信息。基础实现不执行任何操作。如果您想要自定义编辑,您需要重新实现此函数。
另请参阅
- setModelData(editor, model, index)¶
- Parameters:
editor –
QWidgetmodel –
QAbstractItemModelindex –
QModelIndex
将给定
index处的项目的数据设置为给定editor的内容。基础实现不执行任何操作。如果您想要自定义编辑,您需要重新实现此函数。
另请参阅
- abstract sizeHint(option, index)¶
- Parameters:
选项 –
QStyleOptionViewItemindex –
QModelIndex
- Return type:
如果您想提供自定义渲染,则必须重新实现此纯抽象函数。选项由
option指定,模型项由index指定。如果你重新实现这个,你也必须重新实现
paint()。- sizeHintChanged(index)¶
- Parameters:
索引 –
QModelIndex
当
index的sizeHint()发生变化时,必须发出此信号。视图会自动连接到这个信号,并在必要时重新布局项目。
- updateEditorGeometry(editor, option, index)¶
- Parameters:
editor –
QWidget选项 –
QStyleOptionViewItemindex –
QModelIndex
根据
option中指定的矩形,更新具有给定index的项目的editor的几何形状。如果项目有内部布局,编辑器将相应地布局。请注意,索引包含有关所使用的模型的信息。基础实现不执行任何操作。如果您想要自定义编辑,必须重新实现此函数。