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

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 米米 閱讀(550) 評論(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>
            亚洲精品视频在线观看免费| 欧美剧在线观看| 亚洲欧美成人在线| 亚洲欧美国产三级| 国产精品视频第一区| 国产欧美欧洲在线观看| 精品粉嫩aⅴ一区二区三区四区| 狠狠色综合网| 亚洲一区三区电影在线观看| 久久伊人精品天天| 欧美福利精品| 亚洲一区二区免费看| 久久一区中文字幕| 欧美三级精品| 在线看国产日韩| 亚洲在线中文字幕| 香蕉免费一区二区三区在线观看| 美女视频网站黄色亚洲| 国产精品欧美一区喷水| 久久av老司机精品网站导航| 亚洲国产精品成人精品| 亚洲精品女人| 这里只有视频精品| 欧美成人精品在线| 国产午夜精品全部视频播放| 夜夜爽www精品| 麻豆国产精品777777在线| 亚洲性图久久| 国产精品videosex极品| 亚洲美女av黄| 91久久精品久久国产性色也91| 欧美亚洲专区| 国产精品日韩在线一区| 蜜桃av一区二区| 欧美在线看片| 国产中文一区| 老司机久久99久久精品播放免费 | 香蕉久久夜色精品国产| 亚洲国产人成综合网站| 国产麻豆日韩| 久久全国免费视频| 欧美一区成人| 亚洲四色影视在线观看| 亚洲国产中文字幕在线观看| 国产日韩精品在线播放| 99这里有精品| 欧美色区777第一页| 女人天堂亚洲aⅴ在线观看| 久久亚洲午夜电影| 欧美在线视频网站| 欧美日韩亚洲免费| 香蕉乱码成人久久天堂爱免费 | 国产农村妇女精品一区二区| 亚洲伦伦在线| 国产精品大全| 久久久久在线| 国产美女精品在线| 亚洲一二三区在线| 宅男噜噜噜66一区二区| 亚洲视频欧美在线| 一本色道久久综合| 老司机凹凸av亚洲导航| 99国产精品久久| 一区二区日韩| 狠狠久久亚洲欧美| 欧美在线影院| 欧美亚洲在线视频| 国产欧美一区二区三区视频| 一本色道久久综合狠狠躁的推荐| 99国内精品久久| 欧美日韩亚洲另类| 亚洲校园激情| 亚洲欧美日韩精品在线| 久久这里只有精品视频首页| 欧美xxx在线观看| 亚洲黄色性网站| 中日韩美女免费视频网站在线观看 | 亚洲天堂av在线免费观看| 亚洲一区制服诱惑| 国产酒店精品激情| 久久精品亚洲精品| 亚洲视频福利| 国产精品久久二区| 欧美一区二区三区成人| 久久综合狠狠综合久久综合88| 激情亚洲成人| 欧美日韩p片| 欧美成人嫩草网站| 亚洲看片网站| 国产精品高清一区二区三区| 亚洲一区二区三区四区中文| 欧美在线观看视频| 欧美视频在线观看 亚洲欧| 亚洲午夜视频在线| 久久人人爽人人| 99精品久久免费看蜜臀剧情介绍| 国产精品卡一卡二| 日韩亚洲欧美综合| 亚洲韩日在线| 欧美丝袜第一区| 久久久国产午夜精品| 亚洲欧洲另类| 久久午夜av| 中国av一区| 亚洲成色www8888| 欧美午夜精品电影| 久久久久国产成人精品亚洲午夜| 欧美在线视屏| 亚洲精品一二区| 国产欧美一区二区白浆黑人| 欧美成年人网| 欧美一区三区三区高中清蜜桃 | 欧美成黄导航| 小嫩嫩精品导航| 99综合精品| 亚洲电影免费| 国产日韩欧美在线一区| 欧美日韩国产123| 久久一区激情| 欧美中文字幕第一页| 一区二区欧美精品| 亚洲国产精品久久久久秋霞不卡| 久久国产精品亚洲77777| 韩国三级在线一区| 国产精品护士白丝一区av| 免费中文日韩| 一区二区三区高清视频在线观看| 久久综合久久久| 久久精品二区三区| 欧美一区二区免费| 亚洲一区二区三区免费在线观看| 国产精品成人免费视频| 欧美精品电影| 亚洲免费网站| 亚洲一级黄色| 亚洲网站在线播放| 一本色道久久综合一区| 91久久精品一区二区别| 亚洲第一在线综合网站| 亚洲国产综合91精品麻豆| 国内久久精品视频| 国产色产综合产在线视频| 国产精品丝袜白浆摸在线| 国产精品卡一卡二卡三| 欧美午夜在线| 国产精品日韩在线| 国产欧美日韩综合精品二区| 国产精品免费一区豆花| 国产精品在线看| 国产日产亚洲精品| 韩国av一区二区三区四区| 国产亚洲日本欧美韩国| 欧美国产乱视频| 亚洲欧美日韩国产成人| 亚洲国产成人精品久久| 欧美黄色aa电影| 性娇小13――14欧美| 久久久久国内| 亚洲伊人伊色伊影伊综合网| 亚洲一区视频在线观看视频| 亚洲欧美99| 久久久久国产成人精品亚洲午夜| 久久久国产午夜精品| 欧美激情aⅴ一区二区三区| 91久久国产综合久久| 99综合电影在线视频| 亚洲欧美视频一区| 久久国产日韩| 欧美亚洲色图校园春色| 久久天天狠狠| 欧美日韩精品免费在线观看视频| 国产精品免费一区二区三区在线观看| 国产伦精品一区二区三区在线观看| 国内揄拍国内精品少妇国语| 亚洲精品乱码久久久久久| 亚洲欧美日韩精品久久亚洲区| 久久精品成人一区二区三区蜜臀| 欧美成人三级在线| 一区二区高清在线| 久久久91精品国产| 欧美日韩国产三区| 国产尤物精品| 亚洲午夜日本在线观看| 狂野欧美激情性xxxx欧美| 亚洲精品国产精品国自产在线| 欧美成人激情视频免费观看| 亚洲精品自在久久| 久久精品国产清高在天天线| 欧美精品午夜视频| 韩国欧美国产1区| 亚洲欧美精品伊人久久| 欧美电影电视剧在线观看| 亚洲影院一区| 欧美精品久久久久久久久老牛影院| 国产伦精品一区二区三区四区免费| 亚洲精品视频免费| 久久一二三国产| 亚洲欧美视频| 国产精品久久久久久影院8一贰佰| 亚洲国产日韩欧美在线图片|