本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。 QVariant headerData ( intsection , Qt :: Orientationorientation , introle = Qt :: DisplayRole ) const //设置水平头或垂直头标题 bool setHeaderData ( intsection , Qt :: Orientationorientation , constQVariant & value , introle = Qt :: EditRole ) //返回行数 int rowCount ( constQModelIndex & parent = QModelIndex () ) const //返回列数 int columnCount ( constQModelIndex & index = QModelIndex () ) const //model->removeColumns (0)删除第一列 virtual bool removeColumns ( int column , int count , const QModelIndex & parent = QModelIndex () ) //提交所有被修改的数据,然后修改的数据被保存在数据库中 bool QSqlTableModel :: submitAll () //撤销所有的修改,如果数据库已经被提交了修改,就不能通过撤销修改改回来了 void QSqlTableModel :: revertAll () //恢复指定行的改变 virtual void revertRow ( int row ) //筛选,按照字符串filter对数据库进行筛选,相当于SQL中的WHERE语句 void QSqlTableModel :: setFilter ( const QString & filter ) //在筛选和排序的条件下,将数据库中符合要求的在mode表格中显示出来 bool QSqlTableModel :: select () //排序操作。按照列和Qt::SortOrder排序。Qt::SortOrder有升序和降序 void QSqlTableModel :: setSort ( int column , Qt :: SortOrder order ) //插入行 bool insertRow ( int row , const QModelIndex & parent = QModelIndex () ) // 插入列 bool insertColumn ( intcolumn , constQModelIndex & parent = QModelIndex () ) //设置保存策略为手动提交 model -> setEditStrategy ( QSqlTableModel :: OnManualSubmit );

一、在QTableView中显示数据库中表的数据

QMessageBox :: warning ( this , tr (“ tableModel ”), tr (“数据库错误: % 1 ″). arg ( model -> lastError (). text ())); model -> revertAll (); //撤销修改

三、查询操作

相当于SQL语句:SELECT * FROM 表名 WHERE name = "name变量"

model -> insertRow ( rowNum ); //添加一行,或者用insertRows(0,1),在0行添加1条记录,根据表的排序规则,可能移到与指定行不同的行位置上 model -> setData ( model -> index ( rowNum , 0 ), id ); //因为这里设置了ID为主键,所以必须给新行添加id属性值,id字段在第0列上 model -> submitAll (); //可以直接提交 int ok = QMessageBox :: warning ( this , tr ( "删除选中的行!" ), tr ( "你确定删除当前选取中的行吗?" ), QMessageBox :: Yes , QMessageBox :: No ); if ( ok == QMessageBox :: Yes ) model -> submitAll (); //提交,在数据库中删除该行 model -> revertAll (); //如果不删除,则撤销

七、更新记录

必须先定位记录

可以看到这个模型很强大,而且完全脱离了SQL语句,就算你不怎么懂数据库,也可以利用它进行大部分常用的操作。这个模型提供了缓冲区,可以将所有修改先保存到model中,只有当我们执行提交修改后,才会真正写入数据库。当然这也是因为我们在最开始设置了它的保存策略:

model->setEditStrategy(QSqlTableModel::OnManualSubmit);

OnManualSubmit表明我们要提交修改才能使其生效。可以先将修改保存起来,当我们执行提交函数时,再去真正地修改数据库。当然,这个模型比前面的模型更高级,前面讲的所有操作,在这里都能执行。