自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Qt數(shù)據(jù)庫 QSqlQueryModel實例操作 下篇

移動開發(fā)
本文介紹的是Qt數(shù)據(jù)庫 QSqlQueryModel實例操作 上篇,主要介紹QSqlQueryModel類的使用方法,先來看內(nèi)容!

本文介紹的是Qt數(shù)據(jù)庫 QSqlQueryModel實例操作 下篇,接著上篇文章繼續(xù)介紹,Qt數(shù)據(jù)庫 QSqlQueryModel實例操作 下篇 剛開始我們就講到,這個模型默認是只讀的,所以我們在窗口上并不能對表格中的內(nèi)容進行修改。但是我們可以創(chuàng)建自己的模型,然后按照我們自己的意愿來顯示數(shù)據(jù)和修改數(shù)據(jù)。要想使其可讀寫,需要自己的類繼承自QSqlQueryModel,并且重寫setData() 和 flags() 兩個函數(shù)。如果我們要改變數(shù)據(jù)的顯示,就要重寫data() 函數(shù)。

下面的例子中我們讓student表的id屬性列顯示紅色,name屬性列可編輯。

1.我們在工程中添加C++ Class,然后Class name設(shè)為MySqlQueryModel,Base Class設(shè)為QSqlQueryModel,如下:

Qt數(shù)據(jù)庫 QSqlQueryModel實例操作 下篇

2.我們將mysqlquerymodel.h中的內(nèi)容更改如下:

  1. class MySqlQueryModel : public QSqlQueryModel  
  2. {  
  3. public:  
  4.     MySqlQueryModel();  
  5.     //下面三個函數(shù)都是虛函數(shù),我們對其進行重載  
  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.         //添加數(shù)據(jù)  
  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.         //更改數(shù)據(jù)顯示樣式  
  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”

然后更改函數(shù)如下:

  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; //創(chuàng)建自己模型的對象  
  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數(shù)據(jù)庫 QSqlQueryModel實例操作 下篇

可以看到我們要的效果已經(jīng)出來了。本文章原創(chuàng)于www.yafeilinux.com

小結(jié):Qt數(shù)據(jù)庫 QSqlQueryModel實例操作 下篇的內(nèi)容介紹完了,希望本文對你有所幫助,更多資料請參考編輯推薦!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-27 13:32:21

Qt 數(shù)據(jù)庫 QSqlQueryM

2011-07-05 14:46:34

2011-07-05 18:04:45

QT Mysql

2011-07-05 10:16:16

Qt 數(shù)據(jù)庫 SQLite

2011-06-21 15:58:20

Qt 數(shù)據(jù)庫

2011-07-01 10:55:25

Qt 登陸窗口 界面

2011-06-21 15:11:04

QT 數(shù)據(jù)庫

2011-06-27 14:44:30

Qt 數(shù)據(jù)庫 QSqlQuery

2011-07-05 16:08:10

2011-08-30 14:25:06

QT數(shù)據(jù)庫

2011-07-05 18:11:13

Qt 數(shù)據(jù)庫

2011-07-01 13:42:24

QT 數(shù)據(jù)庫

2011-06-27 12:56:28

2011-03-30 09:23:29

2011-07-26 18:11:56

iPhone Sqlite 數(shù)據(jù)庫

2009-08-19 16:30:55

C#操作Access數(shù)

2021-04-15 10:01:18

Sqlite數(shù)據(jù)庫數(shù)據(jù)庫知識

2011-07-19 11:12:07

iPhone 控制器

2010-05-19 16:31:38

MySQL數(shù)據(jù)庫

2011-07-07 16:42:38

iPhone Sqlite3 數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號