一、QSqlQueryModel模型基本使用
//使用QSqlQueryModel来高效地查询数据库操作
//1、创建QSqlQueryModel对象,并设置相关的表头信息
QSqlQueryModel* model = new QSqlQueryModel;
//执行sql语句,将查询出来的结果转换成model对象
model->setQuery("select name ,age,address,salary from staff");
//根据需求设置表头信息
model->setHeaderData(0,Qt::Horizontal,"Name");
model->setHeaderData(1,Qt::Horizontal,"Age");
model->setHeaderData(2,Qt::Horizontal,"Address");
model->setHeaderData(3,Qt::Horizontal,"Salary");
//给ui控件设置一个模型
QTableView* view = new QTableView(ui->tableView);
view->setFixedSize(QSize(this->width(),this->height()));
view->setModel(model);//相当于将数据联动到UI控件上
//将view显示
view->show();
运行后,页面就可以显示出数据库表格相关信息了。
二、QSqlQueryModel可编辑接口重写
默认情况下,QSqlQueryModel模型是只读的。要使它具有可读写性,必须继承它并重新实现setData()和flags()。另一种选择是使用QSqlTableModel,它提供了基于单个数据表的读写模型。
接口一:
[virtual]bool setData(const QModelIndex &index,const QVariant &value,int role = Qt::EditRole)
接口二:
[override virtual]Qt::ItemFlags flags(const QModelIndex &index)const
创建一个新的类用于编辑
editquerymodel.h
#ifndef EDITQUERYMODEL_H
#define EDITQUERYMODEL_H
#include
#include
class editQueryModel : public QSqlQueryModel
{
public:
editQueryModel();
//重写基类的虚函数
bool setData(const QModelIndex &index,const QVariant &value,int role = Qt::EditRole);
Qt::ItemFlags flags(const QModelIndex &index)const;
private:
//自定义接口函数
//更新数据
void refresh();
//根据需求来定义修改表中的内容的接口
bool setName(int useId,const QString& name);
};
#endif // EDITQUERYMODEL_H
editquerymodel.c
#include "editquerymodel.h"
editQueryModel::editQueryModel()
{
}
bool editQueryModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
//1、判断是否为有效列 员工表--id 用户名 年龄 地址 薪资
if(index.column() < 1 || index.column() > 4)
return false;
//获取列所对应的id
QModelIndex prinmaryIndex = QSqlQueryModel::index(index.row(),0);
int id = this->data(prinmaryIndex).toInt();
//在修改行时,将数据清除,把整个model清空
this->clear();
bool ok;
//根据需求修改所对应的列
if(index.column() == 1)
{
ok = setName(id,value.toString());
}
//刷新数据
refresh();
return ok;
}
Qt::ItemFlags editQueryModel::flags(const QModelIndex &index) const
{
//1、获取当前单元格的编辑状态
Qt::ItemFlags flag = QSqlQueryModel::flags(index);
//2、给现有的标志增加一个可编辑的标志
// if(index.column()==1)
flag = flag | Qt::ItemIsEditable;//给它设置一个可编辑的状态
return flag;
}
void editQueryModel::refresh()
{
//相当于将数据库的数据查询出来,转换成一个model
this->setQuery("select * from staff");
this->setHeaderData(0,Qt::Horizontal,"ID");
this->setHeaderData(1,Qt::Horizontal,"Name");
this->setHeaderData(2,Qt::Horizontal,"Age");
this->setHeaderData(3,Qt::Horizontal,"Address");
this->setHeaderData(4,Qt::Horizontal,"Salary");
}
bool editQueryModel::setName(int useId, const QString &name)
{
//相当于一个刷新的操作
QSqlQuery query;
query.prepare("update staff set name = ? where id = ?");
query.addBindValue(name);
query.addBindValue(useId);
return query.exec();
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
SQL
+关注
关注
1文章
764浏览量
44132 -
数据库
+关注
关注
7文章
3799浏览量
64394 -
SQlite
+关注
关注
0文章
78浏览量
15945
发布评论请先 登录
相关推荐
数据库系统是什么?数据库系统概念之数据库设计资料免费下载
什么是概念结构设计1.将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计2.概念结构是各种数据模型的共同基础,它比
发表于 09-07 14:34
•1次下载
如何使用PowerDesigner进行数据库静态结构设计?详细资料概述
把用户需求抽象为概念模型即为概念结构设计。
概念模型除了要求能反映客观世界并且易于理解外,还要求其易于向数据模型(如关系模型)转化。
概念模型独立于具体的数据库系统,是整个数据库设
发表于 09-13 17:05
•0次下载
数据库教程之如何进行数据库设计
本文档的主要内容详细介绍的是数据库教程之如何进行数据库设计内容包括了:1 数据库设计概述 ,2 数据库需求分析 ,3 数据库
发表于 10-19 10:41
•21次下载
数据库设计的七大知识点总结详细资料免费下载
本文档的主要内容详细介绍的是数据库设计的七大知识点总结包括了:1 数据库设计概述2 需求分析3 概念结构设计4 逻辑结构设计5
发表于 10-19 10:41
•0次下载
数据库学习入门资料之如何进行数据库设计
本文档的主要内容详细介绍的是数据库学习入门资料之如何进行数据库设计主要内容包括了:数据库系统设计的1 概述2 需求分析3 概念设计4 逻辑设
发表于 10-25 16:29
•14次下载
数据库学习入门资料之数据库的概念结构详细资料概述
什么是概念结构设计
将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计
概念结构是各种数据模型的共同基础,它比
发表于 10-25 16:29
•0次下载
数据库概念结构是如何设计的概念结构设计资料概述
本文档的主要内容详细介绍的是数据库概念结构是如何设计的概念结构设计资料概述主要内容包括了:1 概念结构2 概念结构设计的方法与步骤3
发表于 10-26 11:49
•22次下载
数据库的设计概念总结
本文档的主要内容详细介绍的是数据库的设计概念总结主要内容包括了:1.数据库设计概述,2.需求分析,3.概念结构设计,4.逻辑结构设计,5.
发表于 01-09 17:29
•13次下载
数据库设计开发案例教程之数据库设计的资料介绍
本文档的主要内容详细介绍的是数据库设计开发案例教程之数据库设计的资料介绍主要内容包括了:1 数据库设计概述,2 需求分析,3 概念结构设计,4 逻辑
发表于 01-11 11:20
•17次下载
Qt学习笔记之数据库结构设计1
数据库也是应用程序的重要部分,一个完整的应用程序几乎都包含数据库。
当前主流的数据库有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。
Sqlite是一款轻型的
Qt学习笔记之数据库结构设计2
数据库也是应用程序的重要部分,一个完整的应用程序几乎都包含数据库。
当前主流的数据库有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。
Sqlite是一款轻型的
评论