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