青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

zhonghua

C++博客 首頁 新隨筆 聯系 聚合 管理
  72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks
該類為單張的數據庫表提供了一個可編輯的數據模型,它支持外鍵,除此之外和QSqlTableModel沒有什么不同
  1. model = new QSqlRelationalTableModel(this);  
  2. model->setEditStrategy(QSqlTableModel::OnFieldChange); //屬性變化時寫入數據庫  
  3. model->setTable("student");  
  4. model->setRelation(2,QSqlRelation("course","id","name"));//將student表的第三個屬性設為course表的id屬性的外鍵,并將其顯示為course表的name屬性的值  
  5. model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));  
  6. model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));  
  7. model->setHeaderData(2, Qt::Horizontal, QObject::tr("Course"));  
  8. model->select();  
  9. tableView->setModel(model);  

 

如果我們希望用戶更改課程屬性時,只能在課程表中已有的課程中進行選擇,而不能隨意填寫課程,那么Qt中的QSqlRelationalDelegate委托類就能實現這個功能

  1. tableView->setItemDelegate(new QSqlRelationalDelegate(tableView)); 

例子:

QSqlRelationalTableModel,該類為單張的數據庫表提供了一個可編輯的數據模型,它支持外鍵。
我 們還是新建Qt4 Gui Application工程,我這里工程名為relationalTableModel ,然后選中QtSql模塊,Base class選QWidget。工程建好后,添加C++ Header File ,命名為database.h,更改其內容如下:
#ifndef DATABASE_H
#define DATABASE_H

#include <QSqlDatabase>
#include <QSqlQuery>

static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("database.db");
    if(!db.open()) return false;
    QSqlQuery query;
    query.exec("create table student (id int primary key, name vchar,course int)");
    query.exec("insert into student values (1,'yafei0',1)");
    query.exec("insert into student values (2,'yafei1',1)");
    query.exec("insert into student values (3,'yafei2',2)");

    query.exec("create table course (id int primary key, name vchar, teacher vchar)");
    query.exec("insert into course values (1,'Math','yafeilinux1')");
    query.exec("insert into course values (2,'English','yafeilinux2')");
    query.exec("insert into course values (3,'Computer','yafeilinux3')");
    return true;
}

#endif // DATABASE_H
我們在這里建立了兩個表,student表中有一項是course,它是int型的,而course表的主鍵也是int型的。如果要將course項和course表進行關聯,它們的類型就必須相同,一定要注意這一點。
然后將main.cpp中的內容更改如下:
#include <QtGui/QApplication>
#include "widget.h"
#include "database.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    if(!createConnection()) return 1;
    Widget w;
    w.show();
    return a.exec();
}


我們在widget.h中添加頭文件: #include <QSqlRelationalTableModel>
然后在private中聲明對象:    QSqlRelationalTableModel *model;
我們在widget.ui中添加一個Table View部件到窗體上,然后到widget.cpp中的構造函數里添加如下代碼:
    model = new QSqlRelationalTableModel(this);
    model->setEditStrategy(QSqlTableModel::OnFieldChange); //屬性變化時寫入數據庫
    model->setTable("student");
    model->setRelation(2,QSqlRelation("course","id","name"));
    //將student表的第三個屬性設為course表的id屬性的外鍵,并將其顯示為course表的name屬性的值
    model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
    model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));
    model->setHeaderData(2, Qt::Horizontal, QObject::tr("Course"));
    model->select();
    ui->tableView->setModel(model);

我們修改了model的提交策略,OnFieldChange表示只要屬性被改動就馬上寫入數據庫,這樣就不需要我們再執行提交函數了。setRelation()函數實現了創建外鍵,注意它的格式就行了。
運行效果如下:


可以看到Course屬性已經不再是編號,而是具體的課程了。關于外鍵,你也應該有一定的認識了吧,說簡單點就是將兩個相關的表建立一個橋梁,讓它們關聯起來。
那么我們也希望,如果用戶更改課程屬性,那么他只能在課程表中有的課程中進行選擇,而不能隨意填寫課程。在Qt中的QSqlRelationalDelegate委托類就能實現這個功能。我們只需在上面的構造函數的最后添加一行代碼:
ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView));
添加代理(委托),在我這里不知為什么會出現SqlRelationalDelegate is not a type name的提示,不過可以編譯通過。
我們需要在widget.cpp中添加頭文件: #include <QSqlRelationalDelegate>
運行效果如下:


可以看到這時修改Course屬性時,就會出現一個下拉框,只能選擇course表中的幾個值。
而利用這個類來操作數據庫,與前面講到的QSqlTableModel沒有區別,這里就不再重復。這幾篇文章一共講了好幾種操作數據庫的方法,到底應該使用哪個呢?那就看你的需求了,根據這幾種方法的特點進行選擇吧。


posted on 2012-04-24 14:39 米米 閱讀(543) 評論(0)  編輯 收藏 引用 所屬分類: qt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线一级va免费观看| 一区二区高清视频| 亚洲欧洲在线播放| 狠狠色伊人亚洲综合成人| 国产精品夜夜夜一区二区三区尤| 欧美激情视频在线播放 | 国产女优一区| 国产亚洲欧美色| 国产日韩欧美中文| 亚洲国产精品欧美一二99| 亚洲最新在线视频| 黄色成人av在线| 亚洲激情av| 亚洲精品一区二区在线| 亚洲清纯自拍| 午夜欧美不卡精品aaaaa| 欧美在线观看网址综合| 另类图片综合电影| 亚洲人成7777| 99re热这里只有精品免费视频| 亚洲一区二区欧美| 久久人人九九| 欧美丝袜第一区| 亚洲国产精品视频一区| 中文精品视频| 欧美不卡视频| 一本久久综合亚洲鲁鲁| 欧美在线视频a| 欧美日韩亚洲综合一区| 国产亚洲精品高潮| 亚洲一区二区3| 亚洲福利专区| 欧美影院视频| 国产精品亚洲片夜色在线| 激情欧美一区二区| 欧美精品系列| 在线视频国内自拍亚洲视频| 一本色道久久88亚洲综合88 | 久久亚洲一区二区| 亚洲看片免费| 欧美不卡视频| 韩国三级在线一区| 性18欧美另类| 一区二区久久| 欧美大片在线看| 国产一区二区剧情av在线| 在线综合+亚洲+欧美中文字幕| 久久国产精品99久久久久久老狼| 亚洲国产欧美不卡在线观看| 欧美中文字幕在线| 欧美三级免费| 一个色综合av| 欧美黄色一区二区| 亚洲一区免费| 国产精品视频免费| 亚洲精品在线一区二区| 欧美激情国产高清| 久久国产乱子精品免费女| 国产免费观看久久| 亚洲一区二区三区777| 亚洲电影在线看| 蜜臀va亚洲va欧美va天堂| 国产亚洲欧美中文| 久久精品一级爱片| 久久久91精品国产一区二区精品| 国产精品国内视频| 国产午夜亚洲精品理论片色戒| 欧美中文日韩| 欧美日韩人人澡狠狠躁视频| 黄色日韩网站视频| 久久久综合免费视频| 亚洲在线观看免费| 国产精品入口尤物| 一区二区av| aa日韩免费精品视频一| 欧美日韩一级黄| 一区二区三区视频在线观看| 99在线热播精品免费| 欧美精品1区2区| 夜夜嗨av一区二区三区网站四季av| 亚洲电影免费在线| 美女国产一区| 99视频精品免费观看| 日韩视频中午一区| 国产精品美女久久久久久久| 亚洲欧美伊人| 欧美在线欧美在线| 亚洲人成亚洲人成在线观看| 一本高清dvd不卡在线观看| 欧美日韩视频一区二区| 久久精品成人| 国产一区导航| 国产精品国产馆在线真实露脸| 亚洲网站在线| 欧美在线视频日韩| 99视频在线精品国自产拍免费观看| 亚洲精品国产日韩| 国产精品最新自拍| 欧美成年人视频网站| 欧美美女bb生活片| 免费不卡在线视频| 欧美日韩国产一中文字不卡 | 欧美1区3d| 欧美sm视频| 欧美一级成年大片在线观看| 久久久久国产免费免费| 中文在线不卡| 老司机一区二区三区| 99精品免费视频| 在线欧美三区| 亚洲欧美三级在线| 91久久久久久久久| 亚洲免费影视| 日韩视频一区二区三区| 久久久久高清| 性色一区二区三区| 欧美激情第1页| 久久精品噜噜噜成人av农村| 欧美大尺度在线观看| 久久久亚洲国产天美传媒修理工 | 欧美日韩免费在线观看| 久久综合网色—综合色88| 国产精品乱人伦一区二区| 亚洲国产精品123| 欧美成人四级电影| 国产精品成人久久久久| 美女国产一区| 国产欧美日韩综合一区在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美四级伦理在线| 日韩午夜在线电影| 亚洲日本成人| 蜜臀av一级做a爰片久久| 久久久久久久91| 免费不卡欧美自拍视频| 在线播放中文字幕一区| 亚洲欧美日韩国产成人精品影院| 9色porny自拍视频一区二区| 欧美国产第一页| 亚洲国产成人在线| 亚洲欧洲一区二区三区久久| 久久久久久亚洲精品杨幂换脸| 久久精品夜色噜噜亚洲aⅴ| 国产精品夜色7777狼人| 欧美亚洲一区三区| 久久一区二区三区国产精品 | 欧美一级淫片播放口| 欧美日韩综合一区| 在线中文字幕一区| 欧美日韩免费看| av不卡在线观看| 久久成人av少妇免费| 国产亚洲精品aa午夜观看| 久久久综合香蕉尹人综合网| 欧美va日韩va| 一区二区av在线| 国产精品欧美风情| 欧美一级专区免费大片| 免费观看一级特黄欧美大片| 亚洲丰满在线| 欧美日韩调教| 亚洲欧美日韩一区| 欧美激情国产日韩| 亚洲午夜精品17c| 久久狠狠亚洲综合| 亚洲人成久久| 国产精品久久久久久久久久久久| 午夜精品一区二区三区在线播放| 久久精品人人爽| 亚洲激情国产| 国产精品美女| 久久嫩草精品久久久精品| 日韩一区二区福利| 久久久久99| 一级日韩一区在线观看| 国产精品无人区| 麻豆成人小视频| 香蕉乱码成人久久天堂爱免费| 米奇777在线欧美播放| 亚洲影院在线观看| 国产真实乱子伦精品视频| 欧美日韩久久久久久| 久久激情网站| 国产视频精品网| 欧美丝袜一区二区| 久久婷婷人人澡人人喊人人爽| 亚洲精品久久| 久久婷婷成人综合色| 亚洲欧美日韩国产| 亚洲国产另类久久精品| 国产精品久久久久久久久久尿 | 精品91在线| 亚洲高清在线播放| 亚洲一线二线三线久久久| 久久这里有精品视频| 亚洲免费影院| 国产字幕视频一区二区| 亚洲精品男同| 国产精品黄视频| 国产欧美一区二区三区视频 |