QT笔记:数据库总结(二)之SQL模型类-QSqlQueryModel模型

34 篇文章 0 订阅
7 篇文章 0 订阅

http://blog.csdn.net/reborntercel/article/details/7000220


QSqlQueryModel类为SQL的结果集提供了一个只读的数据模型,下面我们先利用这个类进行一个最简单的操作.

常用函数

void QSqlQueryModel::setQuery ("SQL语句") // 执行SQL语句,此处还可以传入QSqlQuery对象,此时可以利用QSqlQuery类的某些特性,如预操作等.

setHeaderData()     //设置水平头标题

columnCount(); //获得列数

columnCount(); //获得列数

QSqlRecord QSqlQueryModel::record ( int row ) const //返回row行包含的信息,可访问单条的记录

QModelIndex QAbstractItemModel::index ( int row, int column, const QModelIndex & parent = QModelIndex() )  //返回指定的行和列的索引(index)

index.data()  //返回index索引的值

query() //返回与QSqlQuery相关的模型

[cpp]  view plain  copy
 print ?
  1. QSqlQueryModel *model = new QSqlQueryModel;  
  2. model->setQuery(“select * from student”);  
  3. model->setHeaderData(0, Qt::Horizontal, tr(“id”));  
  4. model->setHeaderData(1, Qt::Horizontal, tr(“name”));  
  5. QTableView *view = new QTableView;  
  6. view->setModel(model);  
  7. view->show();  

 

利用query执行SQL语句

[cpp]  view plain  copy
 print ?
  1. QSqlQuery query = model->query();  
  2. query.exec("select name from student where id = 1");  
  3. query.next();  
  4. qDebug() << query.value(0).toString(); // 如果上面的select改成insert语句,而且是显示在QTableView中的话,需再查询一次model->setQuery("select ...")才能显示刚插入的语句  


       因为QSqlQueryMode模型默认是只读的,所以我们在窗口上并不能对表格中的内容进行修改。但是我们可以创建自己的模型,然后按照我们自己的需要来显示数据和修改数据。如果要想使其可读写,需要自己的类继承自QSqlQueryModel,并且重写setData() 和 flags() 两个函数如果我们要改变数据的显示,就要重写data() 函数

[cpp]  view plain  copy
 print ?
  1. Qt::ItemFlags MySqlQueryModel::flags(const QModelIndex &index) const //返回表格是否可更改的标志  
  2. {  
  3.      Qt::ItemFlags flags = QSqlQueryModel::flags(index);  
  4.      if (index.column() == 1) //第二个字段可更改,即学生的名字字段  
  5.         flags |= Qt::ItemIsEditable;  
  6.      return flags;  
  7.  }  
  8.   
  9. bool MySqlQueryModel::setData(const QModelIndex &index, const QVariant &value, int /* role *///表格添加数据  
  10. {  
  11.     QModelIndex primaryKeyIndex = QSqlQueryModel::index(index.row(), 0);  
  12.     int id = data(primaryKeyIndex).toInt(); //获取id号 也可以这样用,primaryKeyIndex.data();  
  13.   
  14.     clear();  
  15.     bool isOk;  
  16.     if (index.column() == 1) //第二个属性可更改  
  17.     {  
  18.         QSqlQuery query;  
  19.         query.prepare("UPDATE STUDENT SET NAME = :name WHERE id = :id");  
  20.         query.bindValue(":name","小五");  
  21.         query.bindValue(":id",id);  
  22.         isOk = query.exec();  
  23.   
  24.         refresh();// 此处最好添加代码刷新结果,或在此调用刷新函数  
  25.         return isOK;  
  26.     }  
  27.     return false;  
  28. }  
  29.   
  30. void MySqlQueryModel::refresh() //更新显示  
  31. {  
  32.     setQuery("select * from student");  
  33.     setHeaderData(0, Qt::Horizontal, QObject::tr("学号ID"));  
  34.     setHeaderData(1, Qt::Horizontal, QObject::tr("名字"));  
  35. //  
[cpp]  view plain  copy
 print ?
  1. //tata()改写某一个列的显示样式,对齐方式  
  2. QVariant MySqlQueryModel::data(const QModelIndex &index, int role) const  
  3. {  
  4.     QVariant value = QSqlQueryModel::data(index, role);  
  5.     if (role == Qt::TextColorRole && index.column() == 0)  
  6.         return qVariantFromValue(QColor(Qt::red)); //第一个属性的字体颜色为红色  
  7.   
  8.     if (role == Qt::TextAlignmentRole && index.column() == 1)  
  9.     {  
  10.         value = (Qt::AlignVCenter + Qt::AlignRight); // 靠右垂直居中  
  11.     }  
  12.       
  13.     return value;  
  14. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 【QT数据库实战之qsqltablemodel模型.rar是一份实用的资料,它详细介绍了如何利用QT框架的QSqlTableModel模型来操作数据库,并且提供了完整的代码示例和演示视频,为学习者提供了更加直观、全面的学习体验。 其,资料着重介绍了QSqlTableModel模型的使用方法和常见操作,包括如何建立数据源、如何进行数据查询、修改和删除等。此外,它还提供了丰富的实例程序,通过这些程序,学习者可以深入了解不同的应用场景下如何使用QSqlTableModel模型来完成数据处理的操作。 在实际学习,这份资料可以作为一个很好的参考教材。它清晰地展示了QT框架的优势和便捷性,帮助学习者快速了解QSqlTableModel模型的使用方法和注意事项,提高了学习效率。 总的来说,【QT数据库实战之qsqltablemodel模型.rar是一份很有价值的学习资料,对于想深入学习QT数据库编程的开发者来说,是一份不可多得的资料。 ### 回答2: 【qt数据库实战之qsqltablemodel模型.rar 是一个实战教程,主要讲解 qsqltablemodel 模型Qt 数据库编程的应用。该教程适合于想要学习 Qt 数据库编程的开发者,熟悉 C++ 语言以及 Qt 编程基础的开发者更容易理解和掌握其的内容。 该教程主要分为三个部分:Qt 数据库连接的建立、qsqltablemodel 模型的使用以及 qsqlquerymodel 模型的使用。通过阅读该教程,开发者可以学习到如何运用 Qt 自带的数据库模块进行数据库编程,如何使用 qsqltablemodel 模型操作数据库,并且能够理解 qsqlquerymodel 模型的用处和优劣势。 在该教程,开发者将会联系到一个实际的案例,即利用 qsqltablemodel 模型开发一个图书管理系统。通过对该案例的开发实践,开发者可以更好地理解 qsqltablemodel 模型的实际使用,掌握 qsqltablemodel 模型数据库编程的应用。 总之,【qt数据库实战之qsqltablemodel模型.rar 是一份非常实用的 Qt 数据库编程教程,可以帮助开发者对 Qt 数据库编程有更深入的了解和掌握。 ### 回答3: qt 数据库实战之 qsqltablemodel 模型.rar 是一个用于学习 qt 数据库编程的资源文件。qsqltablemodelqt 框架的一个模型,可以用于对数据库进行增删改查操作,并在 qt 的相关控件显示查询结果。 该资源文件包含了一个完整的 qt 项目,其包含了对 qsqltablemodel 的使用示例,可以通过该示例快速入门 qt 数据库编程,掌握 qsqltablemodel 的使用方法。该示例包含了对 sqlite 数据库的连接和操作,可以让你了解 sqlite 数据库的基本用法。 此外,该资源文件还包含了一个使用 qsqltablemodel qt 控件实现的简单的学生管理系统,可以让你更深入地了解 qsqltablemodel 的使用和 qt 数据库编程的实战应用。通过学习和实践,你可以在实际应用运用到这些知识,提高自己的编程水平和实践能力。 总之,qt 数据库实战之 qsqltablemodel 模型.rar 是一份非常有价值的 qt 数据库编程资源,适合想要学习和掌握 qt 数据库编程的开发人员使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值