[QtGui module]
该QDataWidgetMapper类提供了一个数据模型,以小部件的部分之间的映射。More…
继承QObject。
Types
enum SubmitPolicy { AutoSubmit, ManualSubmit }
Methods
__init__ (self, QObject parent = None)
addMapping (self, QWidget widget, int section)
addMapping (self, QWidget widget, int section, QByteArray propertyName)
clearMapping (self)
int currentIndex (self)
QAbstractItemDelegate itemDelegate (self)
QByteArray mappedPropertyName (self, QWidget widget)
int mappedSection (self, QWidget widget)
QWidget mappedWidgetAt (self, int section)
QAbstractItemModel model (self)
Qt.Orientation orientation (self)
removeMapping (self, QWidget widget)
revert (self)
QModelIndex rootIndex (self)
setCurrentIndex (self, int index)
setCurrentModelIndex (self, QModelIndex index)
setItemDelegate (self, QAbstractItemDelegate delegate)
setModel (self, QAbstractItemModel model)
setOrientation (self, Qt.Orientation aOrientation)
setRootIndex (self, QModelIndex index)
setSubmitPolicy (self, SubmitPolicy policy)
bool submit (self)
SubmitPolicy submitPolicy (self)
toFirst (self)
toLast (self)
toNext (self)
toPrevious (self)
Qt Signals
void currentIndexChanged (int)
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 |
下面的代码将模型中的列映射到部件称为mySpinBox
,myLineEdit
和myCountryChooser
:
QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();
在调用后,toFirst( )mySpinBox
显示值1
,myLineEdit
显示器Qt Norway
和myCountryChooser
显示器Oslo
。导航功能toFirst( )toNext( )toPrevious( )toLast()和setCurrentIndex()可以被用于导航模型中,并与从模型内容更新部件。
该setRootIndex( )函数实现了特定的项目中被指定为根指数的模型 - 这资料的孩子会被映射到用户界面相关的部件。
QDataWidgetMapper支持两种提交的政策,AutoSubmit
和ManualSubmit
。AutoSubmit
将尽快更新模型作为当前控件失去焦点,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)
增加了之间的映射widget和section从模型。该section在模型中的列,如果方向是水平的(缺省设置) ,否则一排。
在下面的例子中,我们假设一个模型myModel
有两列:第一包含的人在一组的名称,第二列包含他们的年龄。第一列被映射到QLineEdit nameLineEdit
以及第二映射到QSpinBox ageSpinBox
:
[QDataWidgetMapper](docs_qdatawidgetmapper.html) *mapper = new [QDataWidgetMapper](docs_qdatawidgetmapper.html)();
mapper->setModel(myModel);
mapper->addMapping(nameLineEdit, 0);
mapper->addMapping(ageSpinBox, 1);
Notes:
- If the widget is already mapped to a section, the old mapping will be replaced by the new one.
- Only one-to-one mappings between sections and widgets are allowed. It is not possible to map a single section to multiple widgets, or to map a single widget to multiple sections.
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)
[
返回当前项目委讬。
](docs_qabstractitemdelegate.html)
See also setItemDelegate( ) 。
QByteArray QDataWidgetMapper.mappedPropertyName (self, QWidget widget)
[
返回被映射的数据时使用的属性的名称,以给定的widget。
此功能被引入Qt的4.3 。
](docs_qbytearray.html)
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 ,如果没有部件被映射在该节。
](docs_qwidget.html)
See also addMapping()和removeMapping( ) 。
QAbstractItemModel QDataWidgetMapper.model (self)
[
返回当前的模式。
](docs_qabstractitemmodel.html)
Qt.Orientation QDataWidgetMapper.orientation (self)
[
QDataWidgetMapper.removeMapping (self, QWidget widget)
删除映射为给定的widget。
](docs_qt.html#Orientation-enum)
See also addMapping()和clearMapping( ) 。
QDataWidgetMapper.revert (self)
这种方法也是一个Qt槽与C + +的签名void revert()
。
重新填充所有部件与模型的当前数据。所有未提交的更改将会丢失。
See also submit()和setSubmitPolicy( ) 。
QModelIndex QDataWidgetMapper.rootIndex (self)
[
返回当前根索引。
](docs_qmodelindex.html)
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](docs_qdatawidgetmapper.html) *mapper = new [QDataWidgetMapper](docs_qdatawidgetmapper.html)();
connect(myTableView->selectionModel(), SIGNAL(currentRowChanged([QModelIndex](docs_qmodelindex.html),[QModelIndex](docs_qmodelindex.html))),
mapper, SLOT(setCurrentModelIndex([QModelIndex](docs_qmodelindex.html))));
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)
。
](docs_qdatawidgetmapper.html#SubmitPolicy-enum)
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( ) 。