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

QDataWidgetMapper Class Reference
[QtGui module]

该QDataWidgetMapper类提供了一个数据模型,以小部件的部分之间的映射。More...

继承QObject

Types

Methods

Qt Signals


Detailed Description

该QDataWidgetMapper类提供了一个数据模型,以小部件的部分之间的映射。

QDataWidgetMapper可以使用它们映射到的项目模型部分来创建数据感知部件。 A节是模型中的列,如果方向是水平的(默认值) ,否则一排。

每当当前指数的变化,每个插件是通过在它的映射被做了指定的属性从模型数据更新。如果用户编辑窗口小部件的内容,使用相同的属性被读取和写回模型的变更。默认情况下,每个插件的user property用于传输的模型和部件之间的数据。由于Qt的4.3 ,额外的addMapping( )函数使一个名为属性,而不是默认的用户属性来使用。

它可以设定的项目委讬,支持自定义窗口小部件。默认情况下,QItemDelegate用于同步模式与窗口小部件。

让我们假设我们有一个名为项目模型model其内容如下:

1 Qt Norway Oslo
2 Qt Australia Brisbane
3 Qt USA Palo Alto
4 Qt China Beijing
5 Qt Germany Berlin

下面的代码将模型中的列映射到部件称为mySpinBoxmyLineEditmyCountryChooser

 QDataWidgetMapper *mapper = new QDataWidgetMapper;
 mapper->setModel(model);
 mapper->addMapping(mySpinBox, 0);
 mapper->addMapping(myLineEdit, 1);
 mapper->addMapping(myCountryChooser, 2);
 mapper->toFirst();

在调用后,toFirst( )mySpinBox显示值1myLineEdit显示器Qt NorwaymyCountryChooser显示器Oslo。导航功能toFirst( )toNext( )toPrevious( )toLast()和setCurrentIndex()可以被用于导航模型中,并与从模型内容更新部件。

setRootIndex( )函数实现了特定的项目中被指定为根指数的模型 - 这资料的孩子会被映射到用户界面相关的部件。

QDataWidgetMapper支持两种提交的政策,AutoSubmitManualSubmitAutoSubmit将尽快更新模型作为当前控件失去焦点,ManualSubmit不会更新模型,除非submit()被调用。ManualSubmit显示一个对话框,允许用户取消所有修改的时候非常有用。此外,该显示模型的其他视图将不会更新,直到用户完成所有的修改和提交。

需要注意的是QDataWidgetMapper跟踪外部修改。如果模型的内容​​的应用程序的另一个模块被更新时,窗口小部件被更新。


Type Documentation

QDataWidgetMapper.SubmitPolicy

这个枚举变量描述了可能的提交政策QDataWidgetMapper支持。

Constant Value Description
QDataWidgetMapper.AutoSubmit 0 每当一个widget失去焦点时,控件的当前值设置为项目的模型。
QDataWidgetMapper.ManualSubmit 1 该模型不更新,直到submit()被调用。

Method Documentation

QDataWidgetMapper.__init__ (self, QObject parent = None)

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

构造一个新的QDataWidgetMapper与父对象parent。默认情况下,方向是水平的,而提交政策AutoSubmit

See also setOrientation()和setSubmitPolicy( ) 。

QDataWidgetMapper.addMapping (self, QWidget widget, int section)

增加了之间的映射widgetsection从模型。该section在模型中的列,如果方向是水平的(缺省设置) ,否则一排。

在下面的例子中,我们假设一个模型myModel有两列:第一包含的人在一组的名称,第二列包含他们的年龄。第一列被映射到QLineEdit nameLineEdit以及第二映射到QSpinBox ageSpinBox

 QDataWidgetMapper *mapper = new QDataWidgetMapper();
 mapper->setModel(myModel);
 mapper->addMapping(nameLineEdit, 0);
 mapper->addMapping(ageSpinBox, 1);

Notes:

See also removeMapping( )mappedSection()和clearMapping( ) 。

QDataWidgetMapper.addMapping (self, QWidget widget, int section, QByteArray propertyName)

本质上是相同addMapping( ) ,但增加了指定的属性来指定使用的可能性propertyName

此功能被引入Qt的4.3 。

See also addMapping( ) 。

QDataWidgetMapper.clearMapping (self)

清除所有映射。

See also addMapping()和removeMapping( ) 。

int QDataWidgetMapper.currentIndex (self)

QAbstractItemDelegate QDataWidgetMapper.itemDelegate (self)

返回当前项目委讬。

See also setItemDelegate( ) 。

QByteArray QDataWidgetMapper.mappedPropertyName (self, QWidget widget)

返回被映射的数据时使用的属性的名称,以给定的widget

此功能被引入Qt的4.3 。

See also mappedSection( )addMapping()和removeMapping( ) 。

int QDataWidgetMapper.mappedSection (self, QWidget widget)

返回节widget被映射到或-1,如果小部件不被映射。

See also addMapping()和removeMapping( ) 。

QWidget QDataWidgetMapper.mappedWidgetAt (self, int section)

返回映射在小部件section,或者0 ,如果没有部件被映射在该节。

See also addMapping()和removeMapping( ) 。

QAbstractItemModel QDataWidgetMapper.model (self)

返回当前的模式。

See also setModel( ) 。

Qt.Orientation QDataWidgetMapper.orientation (self)

QDataWidgetMapper.removeMapping (self, QWidget widget)

删除映射为给定的widget

See also addMapping()和clearMapping( ) 。

QDataWidgetMapper.revert (self)

这种方法也是一个Qt槽与C + +的签名void revert()

重新填充所有部件与模型的当前数据。所有未提交的更改将会丢失。

See also submit()和setSubmitPolicy( ) 。

QModelIndex QDataWidgetMapper.rootIndex (self)

返回当前根索引。

See also setRootIndex( ) 。

QDataWidgetMapper.setCurrentIndex (self, int index)

这种方法也是一个Qt槽与C + +的签名void setCurrentIndex(int)

QDataWidgetMapper.setCurrentModelIndex (self, QModelIndex index)

这种方法也是一个Qt槽与C + +的签名void setCurrentModelIndex(const QModelIndex&)

设置当前索引的行index如果方向是水平的(默认值) ,否则到的列index

电话setCurrentIndex(内部) 。这便利槽可连接到所述信号currentRowChanged() or currentColumnChanged()另一种观点认为年代selection model

下面的例子演示了如何更新所有的widget与新数据时的选择QTableView named myTableView变化:

 QDataWidgetMapper *mapper = new QDataWidgetMapper();
 connect(myTableView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
         mapper, SLOT(setCurrentModelIndex(QModelIndex)));

See also currentIndex( ) 。

QDataWidgetMapper.setItemDelegate (self, QAbstractItemDelegate delegate)

设置项委讬delegate。该委讬将用于从模型数据写入到窗口小部件,并从部件的模型,用QAbstractItemDelegate.setEditorData()和QAbstractItemDelegate.setModelData( ) 。

该代表还决定何时应用数据以及何时改变编辑器,使用QAbstractItemDelegate.commitData()和QAbstractItemDelegate.closeEditor( ) 。

Warning:你不应该共享控件映射程序或视图之间的委讬的同一实例。否则会导致不正确或不直观的编辑行为,因为在一个给定的委讬每个视图可能会收到closeEditor()信号,并试图访问,修改或关闭一个已经被关闭的编辑器。

See also itemDelegate( ) 。

QDataWidgetMapper.setModel (self, QAbstractItemModel model)

目前的模式设置为model。如果设置了另一种模式,所有映射到旧的模式被清除。

See also model( ) 。

QDataWidgetMapper.setOrientation (self, Qt.Orientation aOrientation)

QDataWidgetMapper.setRootIndex (self, QModelIndex index)

根项目设置为index。这可以被用来显示一个树的分支。传递一个无效的模型索引来显示最上面的分支。

See also rootIndex( ) 。

QDataWidgetMapper.setSubmitPolicy (self, SubmitPolicy policy)

bool QDataWidgetMapper.submit (self)

这种方法也是一个Qt槽与C + +的签名bool submit()

从提交的映射部件的所有更改到模型中。

对于每一个映射部,该项目委讬从窗口小部件读取的当前值,并将其设置在模型中。最后,该模型是submit()方法被调用。

如果所有的值被提交,否则为False ,则返回True 。

注意:对于数据库模型,QSqlQueryModel.lastError( )可以用来获取最后一个错误。

See also revert()和setSubmitPolicy( ) 。

SubmitPolicy QDataWidgetMapper.submitPolicy (self)

QDataWidgetMapper.toFirst (self)

这种方法也是一个Qt槽与C + +的签名void toFirst()

填充部件与从模型中的第一行的数据,如果方向是水平的(缺省设置) ,否则从第一列中的数据。

这等同于调用setCurrentIndex(0)

See also toLast()和setCurrentIndex( ) 。

QDataWidgetMapper.toLast (self)

这种方法也是一个Qt槽与C + +的签名void toLast()

填充部件与模型的最后一行数据,如果方向是水平的(默认值) ,否则从最后一列的数据。

电话setCurrentIndex(内部) 。

See also toFirst()和setCurrentIndex( ) 。

QDataWidgetMapper.toNext (self)

这种方法也是一个Qt槽与C + +的签名void toNext()

填充部件与模型的下一行数据,如果方向是水平的(默认值) ,否则与下一列的数据。

电话setCurrentIndex(内部) 。什么都不做,如果有在模型中没有下一行。

See also toPrevious()和setCurrentIndex( ) 。

QDataWidgetMapper.toPrevious (self)

这种方法也是一个Qt槽与C + +的签名void toPrevious()

填充部件与模型的上一行数据,如果方向是水平的(默认值) ,否则由前一列的数据。

电话setCurrentIndex(内部) 。什么都不做,如果有在模型中没有前一行。

See also toNext()和setCurrentIndex( ) 。


Qt Signal Documentation

void currentIndexChanged (int)

这是该信号的默认超载。

这个信号被发射后,目前指数已经改变,所有的部件都填充了新的数据。index为新的当前索引。

See also currentIndex()和setCurrentIndex( ) 。




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