当前位置: 首页 > news >正文

上海网站设计公司 静安dw网页制作超链接

上海网站设计公司 静安,dw网页制作超链接,成品视频直播软件推荐哪个好用,嘉定品牌网站建设【Qt之QSqlTableModel】介绍及使用 描述常用方法槽函数信号示例 描述 QSqlTableModel类为单个数据库表提供可编辑的数据模型。 QSqlTableModel是一个高级接口#xff0c;用于从单个表中读写数据库记录。 它建立在较低级别的QSqlQuery之上#xff0c;可用于向QTableView等视… 【Qt之QSqlTableModel】介绍及使用 描述常用方法槽函数信号示例 描述 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); // dont show the nameview-show();以上代码 设置SQL表的名称和编辑策略然后设置视图头中显示的标签编辑策略指示用户在视图中所做的更改何时实际应用于数据库取值为OnFieldChange、OnRowChange、OnManualSubmit。 QSqlTableModel也可以用编程方式访问数据库而不需要绑定到视图: QSqlTableModel model;model.setTable(employee);model.select();int salary model.record(4).value(salary).toInt();以上代码 代码片段从employee查询SELECT *的结果集中的记录4中提取工资字段可以使用setFilter()设置过滤器或者使用setSort()修改排序顺序最后必须调用select()来用数据填充模型。 表模型示例说明了如何使用QSqlTableModel作为QTableView的数据源。 QSqlTableModel不直接支持外键。 如果要解析外键请使用QSqlRelationalTableModel和QSqlRelationalDelegate。 常用方法 枚举QSqlTableModel::EditStrategy 此枚举类型描述在编辑数据库中的值时选择的策略。 常量值描述解释QSqlTableModel::OnFieldChange0All changes to the model will be applied immediately to the database.对模型的所有更改将立即应用于数据库。QSqlTableModel::OnRowChange1Changes to a row will be applied when the user selects a different row.当用户选择另一行时将应用对一行的更改。QSqlTableModel::OnManualSubmit2All changes will be cached in the model until either submitAll() or revertAll() is called.在调用submitAll()或revertAll()之前所有更改都将缓存在模型中。 注意:为了防止只将部分初始化的行插入数据库OnFieldChange的行为将像OnRowChange一样用于新插入的行。 因此一般设置为手动刷新 pTableModel-setEditStrategy(QSqlTableModel::OnManualSubmit);QSqlDatabase database() const 获取模型连接的数据库对象。 EditStrategy editStrategy() const 返回当前的编辑策略。 int fieldIndex(const QString fieldName) const 返回字段的索引返回-1表示此模型内没有该字段。 qDebug().noquote() 当前字段索引 pTableModel-fieldIndex(name);QString filter() const 获取当前设置的过滤。 bool insertRecord(int row, const QSqlRecord record) 在位置行插入记录。如果row为负数则将该记录追加到末尾。内部调用insertRows()和setRecord()。 如果记录可以插入则返回true否则返回false。 更改立即提交OnFieldChange和OnRowChange。失败不会在模型中留下新行。 QSqlRecord record pTableModel-record();qDebug().noquote() 获取字段 record.fieldName(0) record.fieldName(1) record.fieldName(2) record.fieldName(3);record.setValue(field0, 666);record.setValue(field1, 666);record.setValue(field2, 666);record.setValue(field3, 666);// 插入记录// -1 表示在表的末尾插入新记录qDebug().noquote() 插入 pTableModel-insertRecord(pTableModel-rowCount(), record);bool isDirty(const QModelIndex index) const 如果索引index处的值是被改的则返回true否则返回false。脏值是在模型中被修改但尚未写入数据库的值。 如果index无效或指向不存在的行则返回false。 此函数还有重载bool isDirty() const 意思就是 这是一个重载函数。 如果模型包含未提交给数据库的修改值则返回true否则返回false。 QSqlIndex primaryKey() const 返回当前表的主键如果表未设置或没有主键则返回空QSqlIndex。 QSqlRecord record(int row) const 返回模型中第一行的记录。 如果row是有效行的索引则将使用该行的值填充记录。 如果模型没有初始化将返回一个空记录。 此函数还有重载QSqlRecord record() const 意思就是 这是一个重载函数。 返回一个空记录只有字段名称此函数可用于检索记录的字段名。 void revertRow(int row) 恢复指定行的所有改变。 void setFilter(const QString filter) 将当前过滤器设置为filter。 过滤器是一个不带关键字WHERE的SQL WHERE子句(例如nameJosephine)。 如果已经用数据库中的数据填充了模型则模型将使用新的过滤器重新选择它。否则过滤器将在下次调用select()时应用。 QSqlTableModel* pTableModel new QSqlTableModel(ui-tableView, db);pTableModel-setEditStrategy(QSqlTableModel::OnManualSubmit);pTableModel-setTable(\tableTest\);// 未选择pTableModel-setFilter(name 666);// 执行setFilter操作pTableModel-select();if (pTableModel-lastError().isValid()) {qDebug() Error: pTableModel-lastError();}ui-tableView-setModel(pTableModel);// 当前字段索引qDebug().noquote() 当前字段索引 pTableModel-fieldIndex(name);// 重新选择pTableModel-setFilter(name 22); bool setRecord(int row, const QSqlRecord values) 将值应用于模型中的行。源字段和目标字段按字段名映射而不是按记录中的位置映射。 请注意将保留值中生成的标志并确定在将更改提交给数据库时是否使用相应的字段。调用者应该记得将数据库提供值的字段(比如自动增加的ID)的生成标志设置为FALSE。 对于编辑策略OnFieldChange和OnRowChange只有当其他行没有缓存更改时一行才可能接收到更改。更改会立即提交。提交的更改在失败时不会恢复。 如果所有值都可以设置则返回true;否则返回false。 void setSort(int column, Qt::SortOrder order) 将列的排序顺序设置为order。这不会影响当前数据要使用新的排序顺序刷新数据请调用select()。 void setTable(const QString tableName) 将模型操作的数据库表设置为tableName。不从表中选择数据但获取其字段信息。 要用表的数据填充模型请调用select()。 可以使用lastError()检索错误信息。 pTableModel-setTable(\tableTest\);QString tableName() const 获取当前选择的表名 槽函数 bool submit() 从QAbstractItemModel::submit()重新实现。 当用户停止编辑当前行时项委托调用这个重新实现的槽。 如果模型的策略设置为OnRowChange或OnFieldChange则提交当前编辑的行。对OnManualSubmit策略不做任何操作。 使用submitAll()为OnManualSubmit策略提交所有挂起的更改。 成功时返回true;否则返回false。使用lastError()查询详细的错误信息。 不会自动重新填充模型。提交的行在成功时从数据库中刷新。 bool submitAll() 提交所有挂起的更改并在成功时返回true。错误时返回false详细的错误信息可以通过lastError()获得。 在OnManualSubmit中一旦成功模型将被重新填充。任何呈现它的视图都将失去其选择。 注意:在OnManualSubmit模式下当submitAll()失败时已经提交的更改不会从缓存中清除。这允许事务回滚并重新提交而不会丢失数据。 void revert() 从QAbstractItemModel::revert()重新实现。 当用户取消编辑当前行时项目委托调用这个重新实现的槽。 如果模型的策略设置为OnRowChange或OnFieldChange则恢复更改。对OnManualSubmit策略不做任何操作。 使用revertAll()来恢复OnManualSubmit策略的所有挂起的更改或者使用revertRow()来恢复特定的行。 void revertAll() 重置所有缓存操作。 bool select() 使用通过setTable()设置的表中的数据填充模型使用指定的筛选和排序条件如果成功则返回true;否则返回false。 注意:调用select()将恢复所有未提交的更改并删除所有插入的列。 bool selectRow(int row) 使用与主键值匹配的数据库表行中的值刷新模型中的行。如果没有主键所有列值必须匹配。如果没有找到匹配的行模型将显示空行。 如果成功返回true;否则返回false。 信号 void beforeDelete(int row) 该信号由deleteRowFromTable()在从当前活动的数据库表中删除行之前发出。void beforeInsert(QSqlRecord record) 该信号由insertRowIntoTable()在将新行插入当前活动的数据库表之前发出。要插入的值存储在记录中可以在插入之前进行修改。void beforeUpdate(int row, QSqlRecord record) 在使用record中的值更新当前活动数据库表中的行之前updateRowInTable()会发出这个信号。 注意只有标记为生成的值才会被更新。生成标志可以用QSqlRecord::setGenerated()设置用QSqlRecord::isGenerated()检查。void primeInsert(int row, QSqlRecord record) 当在当前活动的数据库表的给定行中发起插入时该信号由insertRows()发出。record参数可以写入(因为它是一个引用)例如用默认值填充一些字段并设置字段的生成标志。在处理此信号时不要尝试通过setData()或setRecord()等其他方法编辑记录。 示例 在.pro中添加QT sql 包含头文件 #include QDebug#include QSqlTableModel#include QSqlDatabase#include QSqlRecord#include QSqlError初始化 QSqlDatabase db QSqlDatabase::addDatabase(QSQLITE);db.setDatabaseName(xxx/xxx/xxx.db);bool ok db.open();QSqlTableModel* pTableModel new QSqlTableModel(ui-tableView, db);pTableModel-setEditStrategy(QSqlTableModel::OnManualSubmit);pTableModel-setTable(\tableTest\);pTableModel-setFilter(name 666);pTableModel-select();if (pTableModel-lastError().isValid()) {qDebug() Error: pTableModel-lastError();}ui-tableView-setModel(pTableModel);// 当前字段索引qDebug().noquote() 当前字段索引 pTableModel-fieldIndex(name);pTableModel-setFilter(name 666); 插入 QSqlTableModel* pTableModel (QSqlTableModel*)ui-tableView-model();// 实现以下代码插入空行后进行数据插入会插入失败。//pTableModel-insertRow(pTableModel-rowCount());QSqlRecord record pTableModel-record();qDebug().noquote() 获取字段 record.fieldName(0) record.fieldName(1) record.fieldName(2) record.fieldName(3);record.setValue(field0, 66);record.setValue(field1, 66);record.setValue(field2, 66);record.setValue(field3, 66);// 插入记录qDebug().noquote() 插入 pTableModel-insertRecord(pTableModel-rowCount(), record); // -1 表示在表的末尾插入新记录 提交 QSqlTableModel* pTableModel (QSqlTableModel*)ui-tableView-model();pTableModel-submitAll();
http://www.sadfv.cn/news/134000/

相关文章:

  • 开发网站的基本流程五个阶段济源网站建设费用
  • 企业诚信建设网站好玩的网站源码
  • 网站排名下降怎么上去网站开发违约解除合同通知函
  • 广东住房和城乡建设局网站首页找人做网站毕业设计
  • seo网站推广实例wordpress媒体库 不显示图片
  • 手机搭建本地网站多少钱算网站
  • 做网站ps注意事项网站制作高手
  • 建设银行 网站首页移动互联网站建设
  • 新泰网站定制怎么让百度收录自己的网站
  • 网站建设设如何在百度提交网站
  • 华强北做电子网站建设森动网网站建设好吗
  • 企业公司网站源码ui做网站流程
  • 网站托管是什么意思沈阳网站外包
  • 宁波市住房和城乡建设培训中心网站dede鲜花网站模板下载
  • 网站建设发生的成本如何记账最有效的网站推广公司
  • 怎么用微信官方网站做二维码贵州网站制作
  • 网站建设经费申请报告办一家建筑公司怎么样
  • 新建茶叶网站文章内容建设dhl做运单的网站
  • win7系统做网站服务器系统在线设计平台canva可画
  • 2018做技术分享网站有前景吗做网站要ftp信息吗
  • 好学校平台网站模板重庆网络营销渠道
  • 贵阳市住房和城乡建设厅网站合肥市建设工程造价信息网站
  • 医院加强网站建设网络运维与网络安全工程师
  • 基金从业培训网站企业手机网站设计案例
  • 一流专业建设网站工业互联网平台架构图
  • 苍溪规划和建设局网站论坛网站方案
  • 无法登陆建设银行网站深圳制作网站建设推广
  • wordpress搭建漫画站网站要跟换域名怎么做
  • 中粮网站是哪个公司做的中国建设银行网站招聘
  • 学院网站的作用庄河网站建设