一、QSqlQueryModel模型基本使用
//使用QSqlQueryModel來(lái)高效地查詢數(shù)據(jù)庫(kù)操作
//1、創(chuàng)建QSqlQueryModel對(duì)象,并設(shè)置相關(guān)的表頭信息
QSqlQueryModel* model = new QSqlQueryModel;
//執(zhí)行sql語(yǔ)句,將查詢出來(lái)的結(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)行后,頁(yè)面就可以顯示出數(shù)據(jù)庫(kù)表格相關(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ù)需求來(lái)定義修改表中的內(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ù)庫(kù)的數(shù)據(jù)查詢出來(lái),轉(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();
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
SQL
+關(guān)注
關(guān)注
1文章
789瀏覽量
46695 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
4019瀏覽量
68337 -
SQlite
+關(guān)注
關(guān)注
0文章
81瀏覽量
16732
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
數(shù)據(jù)庫(kù)系統(tǒng)是什么?數(shù)據(jù)庫(kù)系統(tǒng)概念之數(shù)據(jù)庫(kù)設(shè)計(jì)資料免費(fèi)下載
什么是概念結(jié)構(gòu)設(shè)計(jì)1.將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)即概念模型的過(guò)程就是概念結(jié)構(gòu)設(shè)計(jì)2.概念結(jié)構(gòu)是各種數(shù)據(jù)模型的共同基礎(chǔ),它比
發(fā)表于 09-07 14:34
?1次下載
如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)?數(shù)據(jù)庫(kù)設(shè)計(jì)介紹和需求分析及結(jié)構(gòu)設(shè)計(jì)資料概述
數(shù)據(jù)庫(kù)設(shè)計(jì)的任務(wù)是指根據(jù)需求研制數(shù)據(jù)庫(kù)結(jié)構(gòu)并應(yīng)用 數(shù)據(jù)庫(kù)的過(guò)程。數(shù)據(jù)庫(kù)設(shè)計(jì)內(nèi)容包括數(shù)據(jù)庫(kù)的
發(fā)表于 09-13 17:05
?0次下載
如何使用PowerDesigner進(jìn)行數(shù)據(jù)庫(kù)靜態(tài)結(jié)構(gòu)設(shè)計(jì)?詳細(xì)資料概述
把用戶需求抽象為概念模型即為概念結(jié)構(gòu)設(shè)計(jì)。
概念模型除了要求能反映客觀世界并且易于理解外,還要求其易于向數(shù)據(jù)模型(如關(guān)系模型)轉(zhuǎn)化。
概念模型獨(dú)立于具體的數(shù)據(jù)庫(kù)系統(tǒng),是整個(gè)數(shù)據(jù)庫(kù)設(shè)
發(fā)表于 09-13 17:05
?0次下載
數(shù)據(jù)庫(kù)靜態(tài)結(jié)構(gòu)如何設(shè)計(jì)?詳細(xì)資料任務(wù)和方法說(shuō)明
任務(wù):實(shí)現(xiàn)數(shù)據(jù)庫(kù)設(shè)計(jì)新奧爾良方法中概念結(jié)構(gòu)設(shè)計(jì)和邏輯結(jié)構(gòu)設(shè)計(jì)
發(fā)表于 09-27 15:32
?1次下載
數(shù)據(jù)庫(kù)教程之如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)
本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)教程之如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)內(nèi)容包括了:1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述 ,2 數(shù)據(jù)庫(kù)需求分析 ,3 數(shù)據(jù)庫(kù)
發(fā)表于 10-19 10:41
?21次下載
數(shù)據(jù)庫(kù)設(shè)計(jì)的七大知識(shí)點(diǎn)總結(jié)詳細(xì)資料免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)設(shè)計(jì)的七大知識(shí)點(diǎn)總結(jié)包括了:1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述2 需求分析3 概念結(jié)構(gòu)設(shè)計(jì)4 邏輯結(jié)構(gòu)設(shè)計(jì)5
發(fā)表于 10-19 10:41
?0次下載
數(shù)據(jù)庫(kù)學(xué)習(xí)入門資料之如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)
本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)學(xué)習(xí)入門資料之如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)主要內(nèi)容包括了:數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)的1 概述2 需求分析3 概念設(shè)計(jì)4 邏輯設(shè)
發(fā)表于 10-25 16:29
?14次下載
數(shù)據(jù)庫(kù)學(xué)習(xí)入門資料之數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)詳細(xì)資料概述
什么是概念結(jié)構(gòu)設(shè)計(jì)
將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)即概念模型的過(guò)程就是概念結(jié)構(gòu)設(shè)計(jì)
概念結(jié)構(gòu)是各種數(shù)據(jù)模型的共同基礎(chǔ),它比
發(fā)表于 10-25 16:29
?0次下載
數(shù)據(jù)庫(kù)概念結(jié)構(gòu)是如何設(shè)計(jì)的概念結(jié)構(gòu)設(shè)計(jì)資料概述
本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)概念結(jié)構(gòu)是如何設(shè)計(jì)的概念結(jié)構(gòu)設(shè)計(jì)資料概述主要內(nèi)容包括了:1 概念結(jié)構(gòu)2 概念結(jié)構(gòu)設(shè)計(jì)的方法與步驟3
發(fā)表于 10-26 11:49
?22次下載
數(shù)據(jù)庫(kù)的設(shè)計(jì)概念總結(jié)
本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)的設(shè)計(jì)概念總結(jié)主要內(nèi)容包括了:1.數(shù)據(jù)庫(kù)設(shè)計(jì)概述,2.需求分析,3.概念結(jié)構(gòu)設(shè)計(jì),4.邏輯結(jié)構(gòu)設(shè)計(jì),5.
發(fā)表于 01-09 17:29
?13次下載
數(shù)據(jù)庫(kù)設(shè)計(jì)開(kāi)發(fā)案例教程之數(shù)據(jù)庫(kù)設(shè)計(jì)的資料介紹
本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)設(shè)計(jì)開(kāi)發(fā)案例教程之數(shù)據(jù)庫(kù)設(shè)計(jì)的資料介紹主要內(nèi)容包括了:1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述,2 需求分析,3 概念結(jié)構(gòu)設(shè)計(jì),4 邏輯
發(fā)表于 01-11 11:20
?17次下載
Qt學(xué)習(xí)筆記之數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)1
數(shù)據(jù)庫(kù)也是應(yīng)用程序的重要部分,一個(gè)完整的應(yīng)用程序幾乎都包含數(shù)據(jù)庫(kù)。
當(dāng)前主流的數(shù)據(jù)庫(kù)有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。
Sqlite是一款輕型的
Qt學(xué)習(xí)筆記之數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)2
數(shù)據(jù)庫(kù)也是應(yīng)用程序的重要部分,一個(gè)完整的應(yīng)用程序幾乎都包含數(shù)據(jù)庫(kù)。
當(dāng)前主流的數(shù)據(jù)庫(kù)有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。
Sqlite是一款輕型的
Qt學(xué)習(xí)筆記之數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)6
在Qt中,Qt為SQL數(shù)據(jù)庫(kù)提供支持的基本模塊。Qt SQL的API分為不同的層:
·驅(qū)動(dòng)層
·SQL API層
·用戶接口層
Qt學(xué)習(xí)筆記之數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)7
在Qt中,Qt為SQL數(shù)據(jù)庫(kù)提供支持的基本模塊。Qt SQL的API分為不同的層:
·驅(qū)動(dòng)層
·SQL API層
·用戶接口層
Qt學(xué)習(xí)筆記之?dāng)?shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)5
評(píng)論