Qt数据库 QSqlQueryModel实例操作 下篇

移动开发
本文介绍的是Qt数据库 QSqlQueryModel实例操作 上篇,主要介绍QSqlQueryModel类的使用方法,先来看内容!

本文介绍的是Qt数据库 QSqlQueryModel实例操作 下篇,接着上篇文章继续介绍,Qt数据库 QSqlQueryModel实例操作 下篇 刚开始我们就讲到,这个模型默认是只读的,所以我们在窗口上并不能对表格中的内容进行修改。但是我们可以创建自己的模型,然后按照我们自己的意愿来显示数据和修改数据。要想使其可读写,需要自己的类继承自QSqlQueryModel,并且重写setData() 和 flags() 两个函数。如果我们要改变数据的显示,就要重写data() 函数。

下面的例子中我们让student表的id属性列显示红色,name属性列可编辑。

1.我们在工程中添加C++ Class,然后Class name设为MySqlQueryModel,Base Class设为QSqlQueryModel,如下:

Qt数据库 QSqlQueryModel实例操作 下篇

2.我们将mysqlquerymodel.h中的内容更改如下:

  1. class MySqlQueryModel : public QSqlQueryModel  
  2. {  
  3. public:  
  4.     MySqlQueryModel();  
  5.     //下面三个函数都是虚函数,我们对其进行重载  
  6.     Qt::ItemFlags flags(const QModelIndex &index) const;  
  7.     bool setData(const QModelIndex &index, const QVariant &value, int role);  
  8.  
  9.     QVariant data(const QModelIndex &item, int role=Qt::DisplayRole) const;  
  10.     //  
  11. private:  
  12.     bool setName(int studentId, const QString &name);  
  13.     void refresh();  
  14. }; 

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

  1. #include “mysqlquerymodel.h”  
  2. #include <QSqlQuery> 
  3. #include <QColor> 
  4. MySqlQueryModel::MySqlQueryModel()  
  5. {  
  6. }  
  7.  
  8. Qt::ItemFlags MySqlQueryModel::flags(  
  9.         const QModelIndex &index) const //返回表格是否可更改的标志  
  10. {  
  11.     Qt::ItemFlags flags = QSqlQueryModel::flags(index);  
  12.     if (index.column() == 1) //第二个属性可更改  
  13.         flags |= Qt::ItemIsEditable;  
  14.     return flags;  
  15. }  
  16. bool MySqlQueryModel::setData(const QModelIndex &index, const QVariant &value, int /* role */)  
  17.         //添加数据  
  18. {  
  19.     if (index.column() < 1 || index.column() > 2)  
  20.         return false;  
  21.     QModelIndex primaryKeyIndex = QSqlQueryModel::index(index.row(), 0);  
  22.     int id = data(primaryKeyIndex).toInt(); //获取id号  
  23.     clear();  
  24.     bool ok;  
  25.     if (index.column() == 1) //第二个属性可更改  
  26.         ok = setName(id, value.toString());  
  27.  
  28.     refresh();  
  29.     return ok;  
  30. }  
  31. void MySqlQueryModel::refresh() //更新显示  
  32. {  
  33.     setQuery(“select * from student”);  
  34.     setHeaderData(0, Qt::Horizontal, QObject::tr(“id”));  
  35.     setHeaderData(1, Qt::Horizontal, QObject::tr(“name”));  
  36. }  
  37. bool MySqlQueryModel::setName(int studentId, const QString &name) //添加name属性的值  
  38. {  
  39.     QSqlQuery query;  
  40.     query.prepare(“update student set name = ? where id = ?”);  
  41.     query.addBindValue(name);  
  42.     query.addBindValue(studentId);  
  43.     return query.exec();  
  44. }  
  45. QVariant MySqlQueryModel::data(const QModelIndex &index, int role) const  
  46.         //更改数据显示样式  
  47. {  
  48.     QVariant value = QSqlQueryModel::data(index, role);  
  49.  
  50.     if (role == Qt::TextColorRole && index.column() == 0)  
  51.         return qVariantFromValue(QColor(Qt::red)); //***个属性的字体颜色为红色  
  52.     return value;  

在widget.cpp文件中添加头文件:#include “mysqlquerymodel.h”

然后更改函数如下:

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQueryModel *model = new QSqlQueryModel;  
  4.     model->setQuery(“select * from student”);  
  5.     model->setHeaderData(0, Qt::Horizontal, tr(“id”));  
  6.     model->setHeaderData(1, Qt::Horizontal, tr(“name”));  
  7.     QTableView *view = new QTableView;  
  8.     view->setModel(model);  
  9.     view->show();  
  10.     MySqlQueryModel *myModel = new MySqlQueryModel; //创建自己模型的对象  
  11.     myModel->setQuery(“select * from student”);  
  12.     myModel->setHeaderData(0, Qt::Horizontal, tr(“id”));  
  13.     myModel->setHeaderData(1, Qt::Horizontal, tr(“name”));  
  14.     QTableView *view1 = new QTableView;  
  15.     view1->setWindowTitle(“mySqlQueryModel”); //修改窗口标题  
  16.     view1->setModel(myModel);  
  17.     view1->show();  

运行效果如下:

Qt数据库 QSqlQueryModel实例操作 下篇

可以看到我们要的效果已经出来了。本文章原创于www.yafeilinux.com

小结:Qt数据库 QSqlQueryModel实例操作 下篇的内容介绍完了,希望本文对你有所帮助,更多资料请参考编辑推荐!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-27 13:32:21

Qt 数据库 QSqlQueryM

2011-07-05 14:46:34

2011-07-05 18:04:45

QT Mysql

2011-07-05 10:16:16

Qt 数据库 SQLite

2011-06-21 15:58:20

Qt 数据库

2011-07-01 10:55:25

Qt 登陆窗口 界面

2011-06-21 15:11:04

QT 数据库

2011-06-27 14:44:30

Qt 数据库 QSqlQuery

2011-07-05 16:08:10

2011-08-30 14:25:06

QT数据库

2011-07-01 13:42:24

QT 数据库

2011-07-05 18:11:13

Qt 数据库

2011-06-27 12:56:28

2011-03-30 09:23:29

2011-07-26 18:11:56

iPhone Sqlite 数据库

2009-08-19 16:30:55

C#操作Access数

2021-04-15 10:01:18

Sqlite数据库数据库知识

2011-07-19 11:12:07

iPhone 控制器

2010-05-19 16:31:38

MySQL数据库

2011-07-07 16:42:38

iPhone Sqlite3 数据库
点赞
收藏

51CTO技术栈公众号