成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt數據庫 QSqlQueryModel實例操作 下篇

移動開發
本文介紹的是Qt數據庫 QSqlQueryModel實例操作 上篇,主要介紹QSqlQueryModel類的使用方法,先來看內容!

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

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

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

Qt數據庫 QSqlQueryModel實例操作 下篇

2.我們將mysqlquerymodel.h中的內容更改如下:

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

然后更改函數如下:

  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; //創建自己模型的對象  
  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數據庫 QSqlQueryModel實例操作 下篇

可以看到我們要的效果已經出來了。本文章原創于www.yafeilinux.com

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

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-27 13:32:21

Qt 數據庫 QSqlQueryM

2011-07-05 14:46:34

2011-07-05 10:16:16

Qt 數據庫 SQLite

2011-07-05 18:04:45

QT Mysql

2011-06-21 15:58:20

Qt 數據庫

2011-06-21 15:11:04

QT 數據庫

2011-07-01 10:55:25

Qt 登陸窗口 界面

2011-06-27 14:44:30

Qt 數據庫 QSqlQuery

2011-07-05 16:08:10

2011-08-30 14:25:06

QT數據庫

2011-06-27 12:56:28

2011-07-01 13:42:24

QT 數據庫

2011-07-05 18:11:13

Qt 數據庫

2011-03-30 09:23:29

2009-08-19 16:30:55

C#操作Access數

2011-07-26 18:11:56

iPhone Sqlite 數據庫

2021-04-15 10:01:18

Sqlite數據庫數據庫知識

2011-07-19 11:12:07

iPhone 控制器

2011-07-07 16:42:38

iPhone Sqlite3 數據庫

2011-06-17 10:19:11

Qt QWidge QSetting
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产成人精品女人久久久 | 久久99国产精品 | 国产日批| 色av一区二区 | 日韩精品一区二区三区在线播放 | 久久国产一区二区 | 国产成人a亚洲精品 | 欧美情趣视频 | 在线视频成人 | 午夜视频在线观看一区二区 | 国产视频线观看永久免费 | 精一区二区 | 亚洲国产精品视频一区 | 精品亚洲一区二区三区 | 中国91av| 91精品国产91久久久久青草 | 久热久草 | 一区二区三区中文 | 欧美激情五月 | 91视频一区| 91精品久久久久久久久久入口 | 国产精品a久久久久 | 影音先锋男 | 五月婷婷 六月丁香 | 国产精品一区二区三区久久 | 日韩不卡三区 | 日韩一区欧美一区 | 一级毛片视频 | 国产美女特级嫩嫩嫩bbb片 | 欧美精品二区 | 九九伦理电影 | 日本不卡视频在线播放 | 亚洲巨乳自拍在线视频 | 欧美在线一区二区三区 | 国产精品久久久久永久免费观看 | 日韩一区二区福利 | 国产精品一区二区三区久久久 | 欧美国产视频 | 欧美一区二区三区在线免费观看 | 日韩欧美三级在线 | 成人免费视屏 |