QStyledItemDelegate Class Reference

[QtGui module]

该QStyledItemDelegate类提供了从模型中的数据项的显示和编辑功能。More…

继承QAbstractItemDelegate

Methods

  • __init__ (self, QObject parent = None)
  • QWidget createEditor (self, QWidget parent, QStyleOptionViewItem option, QModelIndex index)
  • QString displayText (self, QVariant value, QLocale locale)
  • bool editorEvent (self, QEvent event, QAbstractItemModel model, QStyleOptionViewItem option, QModelIndex index)
  • bool eventFilter (self, QObject object, QEvent event)
  • initStyleOption (self, QStyleOptionViewItem option, QModelIndex index)
  • QItemEditorFactory itemEditorFactory (self)
  • paint (self, QPainter painter, QStyleOptionViewItem option, QModelIndex index)
  • setEditorData (self, QWidget editor, QModelIndex index)
  • setItemEditorFactory (self, QItemEditorFactory factory)
  • setModelData (self, QWidget editor, QAbstractItemModel model, QModelIndex index)
  • QSize sizeHint (self, QStyleOptionViewItem option, QModelIndex index)
  • updateEditorGeometry (self, QWidget editor, QStyleOptionViewItem option, QModelIndex index)

Detailed Description

该QStyledItemDelegate类提供了从模型中的数据项的显示和编辑功能。

当显示从模型数据中的Qt项目的意见,例如,一个QTableView,个别项目被委讬绘制。此外,当一个项目被编辑时,它提供了一个编辑器窗口小部件,它被放置在项目视图的顶部,同时编辑发生的位置。 QStyledItemDelegate是默认的委讬对所有的Qt项目的意见,并在安装后,他们在创建时。

该QStyledItemDelegate类是一个Model/View Classes并且是Qt的一部分model/view framework。委讬允许项的显示和编辑,以独立于模型和视图开发的。

在模型项的数据分配一个ItemDataRole;每个项目可以存储QVariant为每个角色。 QStyledItemDelegate实现显示和编辑的预期用户最常用的数据类型,包括布尔,整数和字符串。

这些数据将被绘制不同,这取决于他们在模型中的作用。下表描述的角色和数据类型的委讬可以处理它们。它往往是足以确保模型返回每个角色的适当的数据,以确定项目的意见的外观。

Role Accepted Types
Qt.BackgroundRole QBrush
Qt.BackgroundColorRole QColor (obsolete; use Qt.BackgroundRole instead)
Qt.CheckStateRole Qt.CheckState
Qt.DecorationRole QIcon, QPixmap, QImage and QColor
Qt.DisplayRole QString and types with a string representation
Qt.EditRole See QItemEditorFactory for details
Qt.FontRole QFont
Qt.SizeHintRole QSize
Qt.TextAlignmentRole Qt.Alignment
Qt.ForegroundRole QBrush
Qt.TextColorRole QColor (obsolete; use Qt.ForegroundRole instead)

编辑器都具有创建QItemEditorFactory;通过提供一个默认的静态实例QItemEditorFactory安装在所有项目的代表。您可以使用设置一个自定义的工厂setItemEditorFactory( )或设置新的默认出厂带QItemEditorFactory.setDefaultFactory( ) 。它是存储在项目模型与数据EditRole被编辑。请参阅QItemEditorFactory类为更高层的介绍项目编辑器的工厂。该Color Editor Factory示例显示了如何创建自定义编辑器的工厂。

Subclassing QStyledItemDelegate

如果代理不支持绘画你需要的数据类型,或者您要自定义项目的图纸,你需要继承QStyledItemDelegate ,并重新实现paint( )和可能sizeHint( ) 。该paint()函数被单独地调用的每个项目,并与sizeHint( ) ,您可以为每个人指定的提示。

当重新实现paint( ) ,人们通常会处理的数据类型一想绘制和使用超类实现其他类型。

的复选框指标的绘画是由当前样式进行。样式还指定了大小和边界矩形在其中绘制的数据不同的数据的作用。项目本身的边框也被计算的风格。当图纸已经支持的数据类型,因此它是一个好主意,要求风格这些边界矩形。该QStyle类的描述更详细地描述这一点。

如果你想改变任何通过复选框指标的样式或绘画计算的边界矩形的,你可以继承QStyle。但是请注意,这些项的大小也可以受到重新实现sizeHint( ) 。

这是可能的自定义委讬来提供编辑器,无需使用一个编辑器项目工厂。在这种情况下,下面的虚函数必须被重新实现:

  • createEditor() returns the widget used to change data from the model and can be reimplemented to customize editing behavior.
  • setEditorData() provides the widget with data to manipulate.
  • updateEditorGeometry() ensures that the editor is displayed correctly with respect to the item view.
  • setModelData() returns updated data to the model.

Star Delegate例如,通过重新实现这些方法创建编辑器。

QStyledItemDelegate vs. QItemDelegate

由于Qt的4.4 ,有两个委讬类:QItemDelegate和QStyledItemDelegate 。不过,默认的委讬是QStyledItemDelegate 。这两个类是独立的替代品来画,并提供编辑器的项目中的观点。它们之间的区别在于QStyledItemDelegate使用当前样式来绘制它的项目。因此,我们建议实现自定义委讬或与Qt样式表工作时,在使用QStyledItemDelegate作为基类。需要的不是类的代码应该是平等的,除非自定义委讬需要使用的样式绘制。

如果你想自定义的项目意见的画,你应该实现一个自定义样式。请参阅QStyle类文档。


Method Documentation

  1. QStyledItemDelegate.__init__ (self, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个项目委讬给定的parent

  1. QWidget QStyledItemDelegate.createEditor (self, QWidget parent, QStyleOptionViewItem option, QModelIndex index)

[

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

]($docs-qwidget.html)

从重新实现QAbstractItemDelegate.createEditor( ) 。

返回用于编辑由指定的项目小组件index进行编辑。该parent小工具和风格option用于控制如何显示在编辑器部件。

See also QAbstractItemDelegate.createEditor( ) 。

  1. QString QStyledItemDelegate.displayText (self, QVariant value, QLocale locale)

该函数返回一个委讬将用于显示的字符串Qt.DisplayRole该模型中的localevalue是的价值Qt.DisplayRole提供的模型。

默认实现使用的QLocale.toString转换valueQString

这个功能没有要求空模型指数,即指数的模型返回一个无效QVariant

See also QAbstractItemModel.data( ) 。

  1. bool QStyledItemDelegate.editorEvent (self, QEvent event, QAbstractItemModel model, QStyleOptionViewItem option, QModelIndex index)

从重新实现QAbstractItemDelegate.editorEvent( ) 。

  1. bool QStyledItemDelegate.eventFilter (self, QObject object, QEvent event)

从重新实现QObject.eventFilter( ) 。

返回True如果给定的editor是一个有效的QWidget和给定的event处理,否则返回False 。下面的按键事件在默认情况下的处理:

  • Tab
  • Backtab
  • Enter
  • Return
  • Esc

在的情况下TabBacktabEnterReturn按键事件,editor的数据被COMITTED到模型和编辑器被关闭。如果eventTab按键的视图将在视图上的下一个项目打开一个编辑器。同样地,如果eventBacktab按键视图将在打开一个编辑器previous在视图中的项目。

如果该事件是Esc按键事件时,editor关闭without提交其数据。

See also commitData()和closeEditor( ) 。

  1. QStyledItemDelegate.initStyleOption (self, QStyleOptionViewItem option, QModelIndex index)

初始化option与使用索引值index。当他们需要一个这种方法是有用的子类QStyleOptionViewItem,但不希望在所有的信息填写自己。此功能将检查的版本QStyleOptionViewItem并填写了附加价值QStyleOptionViewItemV2QStyleOptionViewItemV3QStyleOptionViewItemV4

See also QStyleOption.initFrom( ) 。

  1. QItemEditorFactory QStyledItemDelegate.itemEditorFactory (self)

[

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

]($docs-qitemeditorfactory.html)

See also setItemEditorFactory( ) 。

  1. QStyledItemDelegate.paint (self, QPainter painter, QStyleOptionViewItem option, QModelIndex index)

从重新实现QAbstractItemDelegate.paint( ) 。

使用给定的呈现委讬painter和风格option由指定的项目index

使用视图的此功能涂料项目QStyle

当在子类中重新实现的油漆。使用initStyleOption( )来设置option以同样的方式作为QStyledItemDelegate;该选项将始终是一个实例QStyleOptionViewItemV4。请参阅其类描述其内容的信息。

只要有可能,使用option而画。尤其是其rect变量来决定在哪里绘制和其state以确定它是否被启用或选定。

喷漆后,您应确保画家返回到其它时,这个函数被调用的供给状态。例如,它可能是有用的呼叫QPainter.save( )之前,绘画和QPainter.restore( )之后。

See also QItemDelegate.paint( )QStyle.drawControl()和QStyle.CE_ItemViewItem

  1. QStyledItemDelegate.setEditorData (self, QWidget editor, QModelIndex index)

从重新实现QAbstractItemDelegate.setEditorData( ) 。

设置由显示和编辑数据editor从模型中指定的数据模型项目index

默认实现存储在数据_editor_widget的user property

See also QMetaProperty.isUser( ) 。

  1. QStyledItemDelegate.setItemEditorFactory (self, QItemEditorFactory factory)

设置编辑工厂中使用的项目的委讬是factory规定。如果没有编辑器出厂设置,该项目代表将使用默认编辑器工厂。

See also itemEditorFactory( ) 。

  1. QStyledItemDelegate.setModelData (self, QWidget editor, QAbstractItemModel model, QModelIndex index)

从重新实现QAbstractItemDelegate.setModelData( ) 。

获取数据从editor插件和将其存储在指定的model在项目index

默认实现得到的值也可以从存储在数据模型_editor_widget的user property

See also QMetaProperty.isUser( ) 。

  1. QSize QStyledItemDelegate.sizeHint (self, QStyleOptionViewItem option, QModelIndex index)

从重新实现QAbstractItemDelegate.sizeHint( ) 。

返回显示由指定的项目需要由委讬的大小index考虑到所提供的样式信息option

该函数使用视图的QStyle以确定该项目的大小。

See also QStyle.sizeFromContents()和QStyle.CT_ItemViewItem

  1. QStyledItemDelegate.updateEditorGeometry (self, QWidget editor, QStyleOptionViewItem option, QModelIndex index)

从重新实现QAbstractItemDelegate.updateEditorGeometry( ) 。

更新editor由指定的项目index根据风格option给出。