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

QSqlTableModel Class Reference
[QtSql module]

在与QSqlTableModel类提供了一个单一的数据库表中的可编辑的数据模型。More...

继承QSqlQueryModel

通过继承QSqlRelationalTableModel

Types

Methods

Qt Signals


Detailed Description

在与QSqlTableModel类提供了一个单一的数据库表中的可编辑的数据模型。

QSqlTableModel的功能是从一个单一的表中读取和写入数据库记录的高层次的接口。它是建立在较低级别的顶QSqlQuery并且可以用来提供数据可以看到类如QTableView。例如:

     QSqlTableModel *model = new QSqlTableModel(parentObject, database);
     model->setTable("employee");
     model->setEditStrategy(QSqlTableModel.OnManualSubmit);
     model->select();
     model->setHeaderData(0, Qt.Horizontal, tr("Name"));
     model->setHeaderData(1, Qt.Horizontal, tr("Salary"));

     QTableView *view = new QTableView;
     view->setModel(model);
     view->hideColumn(0); // don't show the ID
     view->show();

我们设置SQL表的名称和编辑策略,然后我们设置视图中的标题显示的标籤。编辑策略决定时由用户在视图中所做的更改实际应用到数据库。可能的值是OnFieldChangeOnRowChangeOnManualSubmit

QSqlTableModel的功能也可以用来访问数据库编程,不绑定到一个视图:

     QSqlQueryModel model;
     model.setQuery("SELECT * FROM employee");
     int salary = model.record(4).value("salary").toInt();

上面的代码片段中提取salary从查询的结果集记录4场SELECT * from employee

它可以用来设置过滤器setFilter( ),或使用修改排序顺序setSort( ) 。最后,你必须调用select( )来填充模型数据。

sql/tablemodel示例说明了如何使用与QSqlTableModel作为数据源的QTableView

QSqlTableModel为外键没有直接的支持。使用QSqlRelationalTableModelQSqlRelationalDelegate如果你想解决的外键。


Type Documentation

QSqlTableModel.EditStrategy

该枚举类型描述编辑数据库中的值时,选择哪个策略。

Constant Value Description
QSqlTableModel.OnFieldChange 0 所有更改模型将被立即应用到数据库。
QSqlTableModel.OnRowChange 1 当用户选择不同的行改变为一行将被应用。
QSqlTableModel.OnManualSubmit 2 所有更改都将被缓存在模型中,直至submitAll()或revertAll()被调用。

注意:为了防止插入只有部分初始化行插入到数据库中,OnFieldChange会像OnRowChange对于新插入的行。

See also setEditStrategy( ) 。


Method Documentation

QSqlTableModel.__init__ (self, QObject parent = None, QSqlDatabase db = QSqlDatabase())

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

创建一个空的QSqlTableModel并设置父parent与数据库连接db。如果db是无效的,默认的数据库连接将被使用。

默认的编辑策略OnRowChange

QSqlTableModel.clear (self)

从重新实现QSqlQueryModel.clear( ) 。

QVariant QSqlTableModel.data (self, QModelIndex index, int role = Qt.DisplayRole)

从重新实现QAbstractItemModel.data( ) 。

See also setData( ) 。

QSqlDatabase QSqlTableModel.database (self)

返回一个指向所使用的QSqlDatabase或者0,如果没有数据库设置。

bool QSqlTableModel.deleteRowFromTable (self, int row)

删除给定的row从当前活动的数据库表。

这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用removeRow()或removeRows()来删除值。该模型将取决于它的编辑策略,决定何时修改数据库。

返回True如果该行被删除,否则返回False 。

See also removeRow()和removeRows( ) 。

EditStrategy QSqlTableModel.editStrategy (self)

返回当前的编辑策略。

See also setEditStrategy( ) 。

int QSqlTableModel.fieldIndex (self, QString fieldName)

返回字段的索引fieldName,或-1,如果没有相应的字段存在于模型中。

QString QSqlTableModel.filter (self)

返回当前设置的过滤器。

See also setFilter()和select( ) 。

Qt.ItemFlags QSqlTableModel.flags (self, QModelIndex index)

从重新实现QAbstractItemModel.flags( ) 。

QVariant QSqlTableModel.headerData (self, int section, Qt.Orientation orientation, int role = Qt.DisplayRole)

从重新实现QAbstractItemModel.headerData( ) 。

QModelIndex QSqlTableModel.indexInQuery (self, QModelIndex item)

返回在给定的数据库中的结果集的值的索引item在模型中。

返回值是相同的item如果已经插入任何行或列,删除或移动了。

返回一个无效的模型索引,如果item超出范围或item不指向结果集中的值。

See also QSqlQueryModel.indexInQuery( ) 。

bool QSqlTableModel.insertRecord (self, int row, QSqlRecord record)

插入recordrow。如果row为负,该记录将被追加到末尾。电话insertRows()和setRecord(内部) 。

返回True如果可以插入该行,否则为False。

See also insertRows()和removeRows( ) 。

bool QSqlTableModel.insertRowIntoTable (self, QSqlRecord values)

插入的值values到当前活动的数据库表。

这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用insertRow()和setData()来插入值。该模型将取决于它的编辑策略,决定何时修改数据库。

返回True如果该值可以被插入,否则为False。错误信息可以检索与lastError( ) 。

See also lastError( )insertRow()和insertRows( ) 。

bool QSqlTableModel.insertRows (self, int row, int count, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.insertRows( ) 。

Inserts count在位置空行row。需要注意的是parent必须是无效的,因为这种模式不支持父子关系。

仅1行的时间可以在使用被插入的OnFieldChange or OnRowChange更新策略。

primeInsert()信号将被发射的每一个新行。连接到它,如果你想用默认值初始化的新行。

返回False如果参数超出范围,否则返回True 。

See also primeInsert()和insertRecord( ) 。

bool QSqlTableModel.isDirty (self, QModelIndex index)

返回True如果该索引处的值index脏,否则为False 。脏值是进行了修改,在模型中,但尚未写入到数据库中的值。

If index无效或指向一个不存在的列,则返回False。

QString QSqlTableModel.orderByClause (self)

返回一个SQLORDER BY基于条当前设置的排序顺序。

See also setSort()和selectStatement( ) 。

QSqlIndex QSqlTableModel.primaryKey (self)

返回主键为当前表,或空QSqlIndex如果表没有设置或没有主键。

See also setTable( )setPrimaryKey()和QSqlDatabase.primaryIndex( ) 。

bool QSqlTableModel.removeColumns (self, int column, int count, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.removeColumns( ) 。

移除count从列parent模型,从索引column

如果返回的列被成功删除,否则返回False 。

See also removeRows( ) 。

bool QSqlTableModel.removeRows (self, int row, int count, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.removeRows( ) 。

移除count行开始row。由于此型号不支持的层次结构,parent必须是一个无效的模型索引。

放出beforeDelete(一排之前)信号被删除。当编辑策略OnManualSubmit信号发射被延迟,直到submitAll()被调用。

返回True如果所有行会被移除,否则返回False 。详细的错误信息可以使用检索lastError( ) 。

See also removeColumns()和insertRows( ) 。

QSqlTableModel.revert (self)

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

从重新实现QAbstractItemModel.revert( ) 。

这个重新实现槽是由所谓的项目代表,当用户取消了编辑当前行。

恢复的变化,如果模型的策略设置为OnRowChange。什么都不做的其他的编辑策略。

使用revertAll()恢复为所有挂起的更改OnManualSubmit策略或revertRow()来恢复一个特定的行。

See also submit( )submitAll( )revertRow()和revertAll( ) 。

QSqlTableModel.revertAll (self)

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

恢复所有挂起的更改。

See also revert( )revertRow()和submitAll( ) 。

QSqlTableModel.revertRow (self, int row)

恢复为指定的所有变化row

See also revert( )revertAll( )submit()和submitAll( ) 。

int QSqlTableModel.rowCount (self, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.rowCount( ) 。

bool QSqlTableModel.select (self)

填充模型从表中的数据是通过设置setTable( ) ,使用指定的过滤和排序条件,如果成功返回True,否则返回False 。

Note:调用select ( )将返回任何未提交的更改并删除任何插入的列。

See also setTable( )setFilter()和selectStatement( ) 。

QString QSqlTableModel.selectStatement (self)

返回SQLSELECT语句内部使用的填充模式。该表包括过滤器和ORDER BY子句。

See also filter()和orderByClause( ) 。

bool QSqlTableModel.setData (self, QModelIndex index, QVariant value, int role = Qt.EditRole)

从重新实现QAbstractItemModel.setData( ) 。

设置数据的项index为角色rolevalue。取决于编辑策略,则该值可能被应用到数据库一次或缓存在模型中。

返回True如果该值可以设置或虚假的错误,例如,如果index是出界。

See also editStrategy( )data( )submit( )submitAll()和revertRow( ) 。

QSqlTableModel.setEditStrategy (self, EditStrategy strategy)

设置的策略对数据库中的值编辑strategy

这将恢复所有挂起的更改。

See also editStrategy()和revertAll( ) 。

QSqlTableModel.setFilter (self, QString filter)

设置当前过滤器filter

该滤波器是一个SQLWHERE没有关键字条款WHERE(例如,name='Josephine')

如果已填充模型与数据库中的数据,该机型配备了新的过滤器重新选择它。否则,过滤器会在下一次应用select()被调用。

See also filter( )select( )selectStatement()和orderByClause( ) 。

QSqlTableModel.setPrimaryKey (self, QSqlIndex key)

受保护的方法,让子类来设置主键key

通常情况下,只要您拨打的主索引会自动设置setTable( ) 。

See also primaryKey()和QSqlDatabase.primaryIndex( ) 。

QSqlTableModel.setQuery (self, QSqlQuery query)

这个函数简单地调用QSqlQueryModel.setQuery (query) 。在你通常应该不叫QSqlTableModel。相反,使用setTable( )setSort( )setFilter( )等,来设置该查询。

See also selectStatement( ) 。

bool QSqlTableModel.setRecord (self, int row, QSqlRecord record)

在指定的设定值row到的值record。返回True如果所有的值可以被置位,否则返回False 。

See also record( ) 。

QSqlTableModel.setSort (self, int column, Qt.SortOrder order)

设置排序顺序columnorder。这不影响当前数据,使用新的排序顺序,调用刷新数据select( ) 。

See also sort( )select()和orderByClause( ) 。

QSqlTableModel.setTable (self, QString tableName)

对这样的模式操作到数据库表tableName。不从表中选择数据,但其获取字段信息。

要填充模型与表的数据,调用select( ) 。

错误信息可以检索与lastError( ) 。

See also select( )setFilter()和lastError( ) 。

QSqlTableModel.sort (self, int column, Qt.SortOrder order)

从重新实现QAbstractItemModel.sort( ) 。

通过对数据进行排序column与排序顺序order。这将立即选择数据,使用setSort( )来设置排序顺序不填充模型数据。

See also setSort( )select()和orderByClause( ) 。

bool QSqlTableModel.submit (self)

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

从重新实现QAbstractItemModel.submit( ) 。

这个重新实现槽是由所谓的项目代表,当用户停止编辑当前行。

提交当前编辑的行,如果该模型的策略设置为OnRowChange or OnFieldChange。什么都不做的OnManualSubmit战略。

使用submitAll( )提交的所有挂起的更改OnManualSubmit战略。

成功时返回TRUE ,否则返回False 。使用lastError( )来查询详细的错误信息。

成功模型将被重新填充。任何提出它的意见将失去他们的选择。

See also revert( )revertRow( )submitAll( )revertAll()和lastError( ) 。

bool QSqlTableModel.submitAll (self)

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

提交所有挂起的更改,并成功返回True 。返回False的错误,详细的错误信息,可以得到lastError( ) 。

成功模型将被重新填充。任何提出它的意见将失去他们的选择。

注意:在OnManualSubmit模式,已经提交的变更将不会从什么时候submitAll ()失败的缓存中清除。这允许事务被回滚,并再次重新提交,而不会丢失数据。

See also revertAll()和lastError( ) 。

QString QSqlTableModel.tableName (self)

返回当前选定的表的名称。

bool QSqlTableModel.updateRowInTable (self, int row, QSqlRecord values)

更新给定的row在与指定当前活动的数据库表values。成功返回True ,否则返回False 。

这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用setData()来更新值。该模型将取决于它的编辑策略,决定何时修改数据库。

请注意,只有具有所生成的标志设定值被更新。所生成的标志可与设置QSqlRecord.setGenerated( )中,用测试QSqlRecord.isGenerated( ) 。

See also QSqlRecord.isGenerated()和setData( ) 。


Qt Signal Documentation

void beforeDelete (int)

这是该信号的默认超载。

这个信号是由发射deleteRowFromTable( )之前,row从当前活动的数据库表中删除。

void beforeInsert (QSqlRecord&)

这是该信号的默认超载。

这个信号是由发射insertRowIntoTable( )一个新行插入到当前活动的数据库表之前。这是将要被插入的值被存储在record并且可以进行修改将被插入之前,他们。

void beforeUpdate (int,QSqlRecord&)

这是该信号的默认超载。

这个信号是由发射updateRowInTable( )之前,row在当前活动的数据库表从值更新record

请注意,只有被标记为生成的值将被更新。所生成的标记可与设置QSqlRecord.setGenerated() ,并检查与QSqlRecord.isGenerated( ) 。

See also QSqlRecord.isGenerated( ) 。

void primeInsert (int,QSqlRecord&)

这是该信号的默认超载。

这个信号是由发射insertRows( )中,当在给定的开始插入row当前活动的数据库表。该record参数可以被写入(因为它是一个参考),例如,以使用默认值的字段。




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