Qt数据库 QSqlTableModel实例操作(1)

10 篇文章 1 订阅

Qt数据库 QSqlTableModel实例操作是本文所介绍的内容,我们先来看内容。在上一篇我们讲到只读的QSqlQueryModel也可以使其可编辑,但是很麻烦。Qt提供了操作单表的QSqlTableModel,如果我们需要对表的内容进行修改,那么我们就可以直接使用这个类。

相关联文章:

Qt数据库 QSqlQueryModel实例操作 上篇

Qt数据库 QSqlQueryModel实例操作 下篇

QSqlTableModel,该类提供了一个可读写单张SQL表的可编辑数据模型。我们下面就对其的几个常用功能进行介绍,分别是修改,插入,删除,查询,和排序。

在开始讲之前,我们还是新建Qt4 Gui Application工程,我这里工程名为tableModel ,然后选中QtSql模块,Base class选QWidget。工程建好后,添加C++ Header File ,命名为database.h,更改其内容如下:

 
 
  1. #ifndef DATABASE_H  
  2. #define DATABASE_H  
  3.  
  4. #include <QSqlDatabase> 
  5. #include <QSqlQuery> 
  6. #include <QObject> 
  7. static bool createConnection()  
  8. {  
  9.     QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);  
  10.     db.setDatabaseName(“database.db”);  
  11.     if(!db.open()) return false;  
  12.     QSqlQuery query;  
  13.     query.exec(QObject::tr(“create table student (id int primary key, name vchar)”));  
  14.     query.exec(QObject::tr(“insert into student values (0,’刘明’)”));  
  15.     query.exec(QObject::tr(“insert into student values (1,’陈刚’)”));  
  16.     query.exec(QObject::tr(“insert into student values (2,’王红’)”));  
  17.     return true;  
  18. }  
  19. #endif // DATABASE_H 

为了在数据库中能使用中文,我们使用了QObject类的tr()函数。而在下面的main()函数中我们也需要添加相应的代码来支持中文。

然后将main.cpp的文件更改如下:

 
 
  1. #include <QtGui/QApplication> 
  2. #include “widget.h”  
  3. #include “database.h”  
  4. #include <QTextCodec> 
  5. int main(int argc, char *argv[])  
  6. {  
  7.     QApplication a(argc, argv);  
  8.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
  9.     if(!createConnection())  
  10.         return 1;  
  11.     Widget w;  
  12.     w.show();  
  13.     return a.exec();  

下面我们打开widget.ui,设计界面如下:

Qt数据库 QSqlTableModel实例操作

其中的部件有Table View 和 Line Edit,其余是几个按钮部件。

然后在widget.h中加入头文件: #include <QSqlTableModel>

在private中声明对象:QSqlTableModel *model;

因为我们要在不同的函数中使用model对象,所以我们在这里声明它。

我们到widget.cpp文件中的构造函数里添加如下代码:

 
 
  1. model = new QSqlTableModel(this);  
  2. model->setTable(“student”);  
  3. model->setEditStrategy(QSqlTableModel::OnManualSubmit);  
  4. model->select(); //选取整个表的所有行  
  5. // model->removeColumn(1); //不显示name属性列,如果这时添加记录,则该属性的值添加不上  
  6. ui->tableView->setModel(model);  
  7. // ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);   //使其不可编辑 

此时运行程序,效果如下:

Qt数据库 QSqlTableModel实例操作

可以看到,这个模型已经完全脱离了SQL语句,我们只需要执行select()函数就能查询整张表。上面有两行代码被注释掉了,你可以取消注释,测试一下它们的作用。

第一,修改操作。

1.我们进入“提交修改”按钮的单击事件槽函数,修改如下:

 
 
  1. void Widget::on_pushButton_clicked() //提交修改  
  2. {  
  3.     model->database().transaction(); //开始事务操作  
  4.     if (model->submitAll()) {  
  5.         model->database().commit(); //提交  
  6.     } else {  
  7.         model->database().rollback(); //回滚  
  8.         QMessageBox::warning(this, tr(“tableModel”),  
  9.                              tr(“数据库错误: %1″)  
  10.                              .arg(model->lastError().text()));  
  11.     }  

这里用到了事务操作,真正起提交操作的是model->submitAll()一句,它提交所有更改。

转载注明地址:http://www.chengxuyuans.com/Symbian/16738.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值