Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
在与QSqlTableModel类提供了一个单一的数据库表中的可编辑的数据模型。More...
在与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表的名称和编辑策略,然后我们设置视图中的标题显示的标籤。编辑策略决定时由用户在视图中所做的更改实际应用到数据库。可能的值是OnFieldChange,OnRowChange和OnManualSubmit。
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为外键没有直接的支持。使用QSqlRelationalTableModel和QSqlRelationalDelegate如果你想解决的外键。
该枚举类型描述编辑数据库中的值时,选择哪个策略。
Constant | Value | Description |
---|---|---|
QSqlTableModel.OnFieldChange | 0 | 所有更改模型将被立即应用到数据库。 |
QSqlTableModel.OnRowChange | 1 | 当用户选择不同的行改变为一行将被应用。 |
QSqlTableModel.OnManualSubmit | 2 | 所有更改都将被缓存在模型中,直至submitAll()或revertAll()被调用。 |
注意:为了防止插入只有部分初始化行插入到数据库中,OnFieldChange会像OnRowChange对于新插入的行。
See also setEditStrategy( ) 。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
创建一个空的QSqlTableModel并设置父parent与数据库连接db。如果db是无效的,默认的数据库连接将被使用。
默认的编辑策略OnRowChange。
从重新实现QSqlQueryModel.clear( ) 。
从重新实现QAbstractItemModel.data( ) 。
See also setData( ) 。
返回一个指向所使用的QSqlDatabase或者0,如果没有数据库设置。
删除给定的row从当前活动的数据库表。
这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用removeRow()或removeRows()来删除值。该模型将取决于它的编辑策略,决定何时修改数据库。
返回True如果该行被删除,否则返回False 。
See also removeRow()和removeRows( ) 。
返回当前的编辑策略。
See also setEditStrategy( ) 。
返回字段的索引fieldName,或-1,如果没有相应的字段存在于模型中。
返回当前设置的过滤器。
See also setFilter()和select( ) 。
从重新实现QAbstractItemModel.flags( ) 。
从重新实现QAbstractItemModel.headerData( ) 。
返回在给定的数据库中的结果集的值的索引item在模型中。
返回值是相同的item如果已经插入任何行或列,删除或移动了。
返回一个无效的模型索引,如果item超出范围或item不指向结果集中的值。
See also QSqlQueryModel.indexInQuery( ) 。
插入record后row。如果row为负,该记录将被追加到末尾。电话insertRows()和setRecord(内部) 。
返回True如果可以插入该行,否则为False。
See also insertRows()和removeRows( ) 。
插入的值values到当前活动的数据库表。
这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用insertRow()和setData()来插入值。该模型将取决于它的编辑策略,决定何时修改数据库。
返回True如果该值可以被插入,否则为False。错误信息可以检索与lastError( ) 。
See also lastError( )insertRow()和insertRows( ) 。
从重新实现QAbstractItemModel.insertRows( ) 。
Inserts count在位置空行row。需要注意的是parent必须是无效的,因为这种模式不支持父子关系。
仅1行的时间可以在使用被插入的OnFieldChange or OnRowChange更新策略。
该primeInsert()信号将被发射的每一个新行。连接到它,如果你想用默认值初始化的新行。
返回False如果参数超出范围,否则返回True 。
See also primeInsert()和insertRecord( ) 。
返回True如果该索引处的值index脏,否则为False 。脏值是进行了修改,在模型中,但尚未写入到数据库中的值。
If index无效或指向一个不存在的列,则返回False。
返回一个SQLORDER BY基于条当前设置的排序顺序。
See also setSort()和selectStatement( ) 。
返回主键为当前表,或空QSqlIndex如果表没有设置或没有主键。
See also setTable( )setPrimaryKey()和QSqlDatabase.primaryIndex( ) 。
从重新实现QAbstractItemModel.removeColumns( ) 。
移除count从列parent模型,从索引column。
如果返回的列被成功删除,否则返回False 。
See also removeRows( ) 。
从重新实现QAbstractItemModel.removeRows( ) 。
移除count行开始row。由于此型号不支持的层次结构,parent必须是一个无效的模型索引。
放出beforeDelete(一排之前)信号被删除。当编辑策略OnManualSubmit信号发射被延迟,直到submitAll()被调用。
返回True如果所有行会被移除,否则返回False 。详细的错误信息可以使用检索lastError( ) 。
See also removeColumns()和insertRows( ) 。
这种方法也是一个Qt槽与C + +的签名void revert()。
从重新实现QAbstractItemModel.revert( ) 。
这个重新实现槽是由所谓的项目代表,当用户取消了编辑当前行。
恢复的变化,如果模型的策略设置为OnRowChange。什么都不做的其他的编辑策略。
使用revertAll()恢复为所有挂起的更改OnManualSubmit策略或revertRow()来恢复一个特定的行。
See also submit( )submitAll( )revertRow()和revertAll( ) 。
这种方法也是一个Qt槽与C + +的签名void revertAll()。
恢复所有挂起的更改。
See also revert( )revertRow()和submitAll( ) 。
恢复为指定的所有变化row。
See also revert( )revertAll( )submit()和submitAll( ) 。
从重新实现QAbstractItemModel.rowCount( ) 。
填充模型从表中的数据是通过设置setTable( ) ,使用指定的过滤和排序条件,如果成功返回True,否则返回False 。
Note:调用select ( )将返回任何未提交的更改并删除任何插入的列。
See also setTable( )setFilter()和selectStatement( ) 。
返回SQLSELECT语句内部使用的填充模式。该表包括过滤器和ORDER BY子句。
See also filter()和orderByClause( ) 。
从重新实现QAbstractItemModel.setData( ) 。
设置数据的项index为角色role至value。取决于编辑策略,则该值可能被应用到数据库一次或缓存在模型中。
返回True如果该值可以设置或虚假的错误,例如,如果index是出界。
See also editStrategy( )data( )submit( )submitAll()和revertRow( ) 。
设置的策略对数据库中的值编辑strategy。
这将恢复所有挂起的更改。
See also editStrategy()和revertAll( ) 。
设置当前过滤器filter。
该滤波器是一个SQLWHERE没有关键字条款WHERE(例如,name='Josephine')。
如果已填充模型与数据库中的数据,该机型配备了新的过滤器重新选择它。否则,过滤器会在下一次应用select()被调用。
See also filter( )select( )selectStatement()和orderByClause( ) 。
受保护的方法,让子类来设置主键key。
通常情况下,只要您拨打的主索引会自动设置setTable( ) 。
See also primaryKey()和QSqlDatabase.primaryIndex( ) 。
这个函数简单地调用QSqlQueryModel.setQuery (query) 。在你通常应该不叫QSqlTableModel。相反,使用setTable( )setSort( )setFilter( )等,来设置该查询。
See also selectStatement( ) 。
在指定的设定值row到的值record。返回True如果所有的值可以被置位,否则返回False 。
See also record( ) 。
设置排序顺序column至order。这不影响当前数据,使用新的排序顺序,调用刷新数据select( ) 。
See also sort( )select()和orderByClause( ) 。
对这样的模式操作到数据库表tableName。不从表中选择数据,但其获取字段信息。
要填充模型与表的数据,调用select( ) 。
错误信息可以检索与lastError( ) 。
See also select( )setFilter()和lastError( ) 。
从重新实现QAbstractItemModel.sort( ) 。
通过对数据进行排序column与排序顺序order。这将立即选择数据,使用setSort( )来设置排序顺序不填充模型数据。
See also setSort( )select()和orderByClause( ) 。
这种方法也是一个Qt槽与C + +的签名bool submit()。
从重新实现QAbstractItemModel.submit( ) 。
这个重新实现槽是由所谓的项目代表,当用户停止编辑当前行。
提交当前编辑的行,如果该模型的策略设置为OnRowChange or OnFieldChange。什么都不做的OnManualSubmit战略。
使用submitAll( )提交的所有挂起的更改OnManualSubmit战略。
成功时返回TRUE ,否则返回False 。使用lastError( )来查询详细的错误信息。
成功模型将被重新填充。任何提出它的意见将失去他们的选择。
See also revert( )revertRow( )submitAll( )revertAll()和lastError( ) 。
这种方法也是一个Qt槽与C + +的签名bool submitAll()。
提交所有挂起的更改,并成功返回True 。返回False的错误,详细的错误信息,可以得到lastError( ) 。
成功模型将被重新填充。任何提出它的意见将失去他们的选择。
注意:在OnManualSubmit模式,已经提交的变更将不会从什么时候submitAll ()失败的缓存中清除。这允许事务被回滚,并再次重新提交,而不会丢失数据。
See also revertAll()和lastError( ) 。
返回当前选定的表的名称。
更新给定的row在与指定当前活动的数据库表values。成功返回True ,否则返回False 。
这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用setData()来更新值。该模型将取决于它的编辑策略,决定何时修改数据库。
请注意,只有具有所生成的标志设定值被更新。所生成的标志可与设置QSqlRecord.setGenerated( )中,用测试QSqlRecord.isGenerated( ) 。
See also QSqlRecord.isGenerated()和setData( ) 。
这是该信号的默认超载。
这个信号是由发射deleteRowFromTable( )之前,row从当前活动的数据库表中删除。
这是该信号的默认超载。
这个信号是由发射insertRowIntoTable( )一个新行插入到当前活动的数据库表之前。这是将要被插入的值被存储在record并且可以进行修改将被插入之前,他们。
这是该信号的默认超载。
这个信号是由发射updateRowInTable( )之前,row在当前活动的数据库表从值更新record。
请注意,只有被标记为生成的值将被更新。所生成的标记可与设置QSqlRecord.setGenerated() ,并检查与QSqlRecord.isGenerated( ) 。
See also QSqlRecord.isGenerated( ) 。
这是该信号的默认超载。
这个信号是由发射insertRows( )中,当在给定的开始插入row当前活动的数据库表。该record参数可以被写入(因为它是一个参考),例如,以使用默认值的字段。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |