Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QItemDelegate Class Reference
[QtGui module]

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

继承QAbstractItemDelegate

通过继承QSqlRelationalDelegate

Methods


Detailed Description

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

QItemDelegate可用于基于项目视图提供了自定义显示功能和编辑器部件QAbstractItemView子类。使用委讬为此目的允许显示和编辑机制,从模型和视图定制和自主开发。

该QItemDelegate类是一个Model/View Classes并且是Qt的一部分model/view framework。需要注意的是QStyledItemDelegate接管绘制Qt的项目视图的工作。我们建议使用QStyledItemDelegate创建新的委讬时。

当从一个标准视图自定义模型显示的项目,它往往是足够简单地确保模型返回相应的数据为每个roles确定项目的视图的外观。使用Qt的标准视图中的默认代理使用这个角色信息中的大部分预期用户的常见形式显示项目。然而,有时需要有更多的控制比默认代理可以提供物品的外观。

这个类提供了用于从项目模型视图和编辑数据的绘画项目数据的功能默认实现。的默认实现paint()和sizeHint( )虚函数,定义QAbstractItemDelegate,提供了确保委讬实现了预期的看法正确的基本行为。您可以在子类中重新实现这些功能可以自定义项的外观。

当一个项目视图中编辑数据, QItemDelegate提供了一个编辑器部件,这是放置在视图的顶部编辑时发生的一个小部件。编辑器都具有创建QItemEditorFactory;通过提供一个默认的静态实例QItemEditorFactory安装在所有项目的代表。您可以使用设置一个自定义的工厂setItemEditorFactory( )或设置新的默认出厂带QItemEditorFactory.setDefaultFactory( ) 。它是存储在项目模型与数据Qt.EditRole被编辑。

仅适用于部件为基础的代表的标准编辑功能都在这里重新实现:

closeEditor()信号表明用户已经完成了编辑数据,并且该编辑器部件可以被摧毁。

Standard Roles and Data Types

通过使用Qt提供的标准视图中的默认代理将每个标准角色(定义为Qt.ItemDataRole)与某些数据类型。模型返回的数据在这些类型可以影响代表的,如下表中所述的外观。

Role Accepted Types
Qt.BackgroundRole QBrush
Qt.BackgroundColorRole QColor (obsolete; use Qt.BackgroundRole instead)
Qt.CheckStateRole Qt.CheckState
Qt.DecorationRole QIcon, QPixmap 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)

如果默认的委讬不允许你需要的定制化水平,无论是用于显示目的或编辑数据,就可以继承QItemDelegate实施所需的行为。

Subclassing

当子类QItemDelegate创建一个使用自定义渲染器显示的项目委讬,重要的是要确保委讬可以适当渲染项目所需的所有国家;如选择禁用,检查。该文档为paint( )函数包含一些提示,说明如何可以做到这一点。

您可以通过使用一个提供自定义编辑器QItemEditorFactory。该Color Editor Factory Example展示了如何自定义编辑器,可以提供给与会代表使用默认项目编辑器的工厂。这样一来,就没有必要向子类QItemDelegate 。另一种方法是重新实现createEditor( )setEditorData( )setModelData()和updateEditorGeometry( ) 。这个过程是在所描述的Spin Box Delegate Example

QStyledItemDelegate vs. QItemDelegate

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


Method Documentation

QItemDelegate.__init__ (self, QObject parent = None)

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

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

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

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

从重新实现QAbstractItemDelegate.createEditor( ) 。

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

See also QAbstractItemDelegate.createEditor( ) 。

QItemDelegate.drawBackground (self, QPainter painter, QStyleOptionViewItem option, QModelIndex index)

呈现项目背景为给定的index,使用给定的painter和风格option

这个函数中引入了Qt 4.2中。

QItemDelegate.drawCheck (self, QPainter painter, QStyleOptionViewItem option, QRect rect, Qt.CheckState state)

呈现由指定的矩形内的检查指标rect,使用给定的painter和风格option,使用给定的state

QItemDelegate.drawDecoration (self, QPainter painter, QStyleOptionViewItem option, QRect rect, QPixmap pixmap)

渲染装饰pixmap由指定的矩形内rect使用给定的painter和风格option

QItemDelegate.drawDisplay (self, QPainter painter, QStyleOptionViewItem option, QRect rect, QString text)

呈现项目视图text由指定的矩形内rect使用给定的painter和风格option

QItemDelegate.drawFocus (self, QPainter painter, QStyleOptionViewItem option, QRect rect)

呈现由指定的矩形区域内的rect,这表明它具有焦点,使用给定的painter和风格option

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

从重新实现QAbstractItemDelegate.editorEvent( ) 。

bool QItemDelegate.eventFilter (self, QObject object, QEvent event)

从重新实现QObject.eventFilter( ) 。

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

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

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

See also commitData()和closeEditor( ) 。

bool QItemDelegate.hasClipping (self)

QItemEditorFactory QItemDelegate.itemEditorFactory (self)

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

See also setItemEditorFactory( ) 。

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

从重新实现QAbstractItemDelegate.paint( ) 。

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

当重新实现在子类中这个功能,你应该更新的选项持的区域rect变量,使用选项的state变量来确定要显示的项的状态,并调整其相应绘的方式。

例如,所选择的项目,可能需要不同地未被选择的项目显示,如显示在下面的代码:

     if (option.state & QStyle.State_Selected)
         painter->fillRect(option.rect, option.palette.highlight());

     int size = qMin(option.rect.width(), option.rect.height());
     int brightness = index.model()->data(index, Qt.DisplayRole).toInt();
     double radius = (size/2.0) - (brightness/255.0 * size/2.0);
     if (radius == 0.0)
         return;

     painter->save();
     painter->setRenderHint(QPainter.Antialiasing, true);
     painter->setPen(Qt.NoPen);
     if (option.state & QStyle.State_Selected)
         painter->setBrush(option.palette.highlightedText());
     else
     ...

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

See also QStyle.State

QItemDelegate.setClipping (self, bool clip)

QItemDelegate.setEditorData (self, QWidget editor, QModelIndex index)

从重新实现QAbstractItemDelegate.setEditorData( ) 。

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

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

See also QMetaProperty.isUser( ) 。

QItemDelegate.setItemEditorFactory (self, QItemEditorFactory factory)

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

See also itemEditorFactory( ) 。

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

从重新实现QAbstractItemDelegate.setModelData( ) 。

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

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

See also QMetaProperty.isUser( ) 。

QSize QItemDelegate.sizeHint (self, QStyleOptionViewItem option, QModelIndex index)

从重新实现QAbstractItemDelegate.sizeHint( ) 。

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

当重新实现此功能,请注意,在案件的文本项,QItemDelegate增加了利润率(即2 *QStyle.PM_FocusFrameHMargin)以文本的长度。

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

从重新实现QAbstractItemDelegate.updateEditorGeometry( ) 。

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




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5