Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
该QDataWidgetMapper类提供了一个数据模型,以小部件的部分之间的映射。More...
继承QObject。
该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跟踪外部修改。如果模型的内容的应用程序的另一个模块被更新时,窗口小部件被更新。
这个枚举变量描述了可能的提交政策QDataWidgetMapper支持。
Constant | Value | Description |
---|---|---|
QDataWidgetMapper.AutoSubmit | 0 | 每当一个widget失去焦点时,控件的当前值设置为项目的模型。 |
QDataWidgetMapper.ManualSubmit | 1 | 该模型不更新,直到submit()被调用。 |
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个新的QDataWidgetMapper与父对象parent。默认情况下,方向是水平的,而提交政策AutoSubmit。
See also setOrientation()和setSubmitPolicy( ) 。
增加了之间的映射widget和section从模型。该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( ) 。
本质上是相同addMapping( ) ,但增加了指定的属性来指定使用的可能性propertyName。
此功能被引入Qt的4.3 。
See also addMapping( ) 。
清除所有映射。
See also addMapping()和removeMapping( ) 。
返回当前项目委讬。
See also setItemDelegate( ) 。
返回被映射的数据时使用的属性的名称,以给定的widget。
此功能被引入Qt的4.3 。
See also mappedSection( )addMapping()和removeMapping( ) 。
返回节widget被映射到或-1,如果小部件不被映射。
See also addMapping()和removeMapping( ) 。
返回映射在小部件section,或者0 ,如果没有部件被映射在该节。
See also addMapping()和removeMapping( ) 。
返回当前的模式。
See also setModel( ) 。
删除映射为给定的widget。
See also addMapping()和clearMapping( ) 。
这种方法也是一个Qt槽与C + +的签名void revert()。
重新填充所有部件与模型的当前数据。所有未提交的更改将会丢失。
See also submit()和setSubmitPolicy( ) 。
返回当前根索引。
See also setRootIndex( ) 。
这种方法也是一个Qt槽与C + +的签名void setCurrentIndex(int)。
这种方法也是一个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( ) 。
设置项委讬delegate。该委讬将用于从模型数据写入到窗口小部件,并从部件的模型,用QAbstractItemDelegate.setEditorData()和QAbstractItemDelegate.setModelData( ) 。
该代表还决定何时应用数据以及何时改变编辑器,使用QAbstractItemDelegate.commitData()和QAbstractItemDelegate.closeEditor( ) 。
Warning:你不应该共享控件映射程序或视图之间的委讬的同一实例。否则会导致不正确或不直观的编辑行为,因为在一个给定的委讬每个视图可能会收到closeEditor()信号,并试图访问,修改或关闭一个已经被关闭的编辑器。
See also itemDelegate( ) 。
目前的模式设置为model。如果设置了另一种模式,所有映射到旧的模式被清除。
See also model( ) 。
根项目设置为index。这可以被用来显示一个树的分支。传递一个无效的模型索引来显示最上面的分支。
See also rootIndex( ) 。
这种方法也是一个Qt槽与C + +的签名bool submit()。
从提交的映射部件的所有更改到模型中。
对于每一个映射部,该项目委讬从窗口小部件读取的当前值,并将其设置在模型中。最后,该模型是submit()方法被调用。
如果所有的值被提交,否则为False ,则返回True 。
注意:对于数据库模型,QSqlQueryModel.lastError( )可以用来获取最后一个错误。
See also revert()和setSubmitPolicy( ) 。
这种方法也是一个Qt槽与C + +的签名void toFirst()。
填充部件与从模型中的第一行的数据,如果方向是水平的(缺省设置) ,否则从第一列中的数据。
这等同于调用setCurrentIndex(0)。
See also toLast()和setCurrentIndex( ) 。
这种方法也是一个Qt槽与C + +的签名void toLast()。
填充部件与模型的最后一行数据,如果方向是水平的(默认值) ,否则从最后一列的数据。
电话setCurrentIndex(内部) 。
See also toFirst()和setCurrentIndex( ) 。
这种方法也是一个Qt槽与C + +的签名void toNext()。
填充部件与模型的下一行数据,如果方向是水平的(默认值) ,否则与下一列的数据。
电话setCurrentIndex(内部) 。什么都不做,如果有在模型中没有下一行。
See also toPrevious()和setCurrentIndex( ) 。
这种方法也是一个Qt槽与C + +的签名void toPrevious()。
填充部件与模型的上一行数据,如果方向是水平的(默认值) ,否则由前一列的数据。
电话setCurrentIndex(内部) 。什么都不做,如果有在模型中没有前一行。
See also toNext()和setCurrentIndex( ) 。
这是该信号的默认超载。
这个信号被发射后,目前指数已经改变,所有的部件都填充了新的数据。index为新的当前索引。
See also currentIndex()和setCurrentIndex( ) 。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |