一、QSqlQueryModel模型基本使用
//使用QSqlQueryModel來高效地查詢數(shù)據(jù)庫操作
//1、創(chuàng)建QSqlQueryModel對(duì)象,并設(shè)置相關(guān)的表頭信息
QSqlQueryModel* model = new QSqlQueryModel;
//執(zhí)行sql語句,將查詢出來的結(jié)果轉(zhuǎn)換成model對(duì)象
model->setQuery("select name ,age,address,salary from staff");
//根據(jù)需求設(shè)置表頭信息
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控件設(shè)置一個(gè)模型
QTableView* view = new QTableView(ui->tableView);
view->setFixedSize(QSize(this->width(),this->height()));
view->setModel(model);//相當(dāng)于將數(shù)據(jù)聯(lián)動(dòng)到UI控件上
//將view顯示
view->show();
運(yùn)行后,頁面就可以顯示出數(shù)據(jù)庫表格相關(guān)信息了。
二、QSqlQueryModel可編輯接口重寫
默認(rèn)情況下,QSqlQueryModel模型是只讀的。要使它具有可讀寫性,必須繼承它并重新實(shí)現(xiàn)setData()和flags()。另一種選擇是使用QSqlTableModel,它提供了基于單個(gè)數(shù)據(jù)表的讀寫模型。
接口一:
[virtual]bool setData(const QModelIndex &index,const QVariant &value,int role = Qt::EditRole)
接口二:
[override virtual]Qt::ItemFlags flags(const QModelIndex &index)const
創(chuàng)建一個(gè)新的類用于編輯
editquerymodel.h
#ifndef EDITQUERYMODEL_H
#define EDITQUERYMODEL_H
#include
#include
class editQueryModel : public QSqlQueryModel
{
public:
editQueryModel();
//重寫基類的虛函數(shù)
bool setData(const QModelIndex &index,const QVariant &value,int role = Qt::EditRole);
Qt::ItemFlags flags(const QModelIndex &index)const;
private:
//自定義接口函數(shù)
//更新數(shù)據(jù)
void refresh();
//根據(jù)需求來定義修改表中的內(nèi)容的接口
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;
//獲取列所對(duì)應(yīng)的id
QModelIndex prinmaryIndex = QSqlQueryModel::index(index.row(),0);
int id = this->data(prinmaryIndex).toInt();
//在修改行時(shí),將數(shù)據(jù)清除,把整個(gè)model清空
this->clear();
bool ok;
//根據(jù)需求修改所對(duì)應(yīng)的列
if(index.column() == 1)
{
ok = setName(id,value.toString());
}
//刷新數(shù)據(jù)
refresh();
return ok;
}
Qt::ItemFlags editQueryModel::flags(const QModelIndex &index) const
{
//1、獲取當(dāng)前單元格的編輯狀態(tài)
Qt::ItemFlags flag = QSqlQueryModel::flags(index);
//2、給現(xiàn)有的標(biāo)志增加一個(gè)可編輯的標(biāo)志
// if(index.column()==1)
flag = flag | Qt::ItemIsEditable;//給它設(shè)置一個(gè)可編輯的狀態(tài)
return flag;
}
void editQueryModel::refresh()
{
//相當(dāng)于將數(shù)據(jù)庫的數(shù)據(jù)查詢出來,轉(zhuǎn)換成一個(gè)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)
{
//相當(dāng)于一個(gè)刷新的操作
QSqlQuery query;
query.prepare("update staff set name = ? where id = ?");
query.addBindValue(name);
query.addBindValue(useId);
return query.exec();
}
-
SQL
+關(guān)注
關(guān)注
1文章
780瀏覽量
44787 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3900瀏覽量
65728 -
SQlite
+關(guān)注
關(guān)注
0文章
81瀏覽量
16299
發(fā)布評(píng)論請(qǐng)先 登錄
數(shù)據(jù)庫系統(tǒng)是什么?數(shù)據(jù)庫系統(tǒng)概念之數(shù)據(jù)庫設(shè)計(jì)資料免費(fèi)下載

如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)?數(shù)據(jù)庫設(shè)計(jì)介紹和需求分析及結(jié)構(gòu)設(shè)計(jì)資料概述

如何使用PowerDesigner進(jìn)行數(shù)據(jù)庫靜態(tài)結(jié)構(gòu)設(shè)計(jì)?詳細(xì)資料概述

數(shù)據(jù)庫靜態(tài)結(jié)構(gòu)如何設(shè)計(jì)?詳細(xì)資料任務(wù)和方法說明

數(shù)據(jù)庫教程之如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)

數(shù)據(jù)庫設(shè)計(jì)的七大知識(shí)點(diǎn)總結(jié)詳細(xì)資料免費(fèi)下載

數(shù)據(jù)庫學(xué)習(xí)入門資料之如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)

數(shù)據(jù)庫學(xué)習(xí)入門資料之數(shù)據(jù)庫的概念結(jié)構(gòu)詳細(xì)資料概述

數(shù)據(jù)庫概念結(jié)構(gòu)是如何設(shè)計(jì)的概念結(jié)構(gòu)設(shè)計(jì)資料概述

數(shù)據(jù)庫的設(shè)計(jì)概念總結(jié)

數(shù)據(jù)庫設(shè)計(jì)開發(fā)案例教程之數(shù)據(jù)庫設(shè)計(jì)的資料介紹

Qt學(xué)習(xí)筆記之數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)1

Qt學(xué)習(xí)筆記之數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)2

Qt學(xué)習(xí)筆記之數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)6

Qt學(xué)習(xí)筆記之數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)7

評(píng)論