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

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>
            亚洲人妖在线| 一区二区三区国产盗摄| 欧美国产精品日韩| 久久综合色88| 欧美+亚洲+精品+三区| 久久久久久亚洲精品杨幂换脸| 亚洲男女毛片无遮挡| 亚洲尤物影院| 欧美影院成年免费版| 久久精品国产v日韩v亚洲| 久久久亚洲国产天美传媒修理工| 久久亚洲精品一区二区| 久久夜色精品国产欧美乱| 久久亚洲精品伦理| 亚洲福利久久| 欧美久久久久久蜜桃| 欧美激情1区2区3区| 欧美视频在线免费| 国产一区二区久久精品| 在线观看成人网| 一二三四社区欧美黄| 欧美中文字幕在线播放| 亚洲风情亚aⅴ在线发布| 亚洲欧洲日韩女同| 亚洲自拍高清| 亚洲第一主播视频| 亚洲一区综合| 美女视频网站黄色亚洲| 国产精品国产三级国产普通话三级| 国产私拍一区| 一区二区高清在线观看| 久久久99免费视频| 日韩天天综合| 久久综合999| 国产手机视频精品| 亚洲免费av电影| 久久久久久久久久久一区| 亚洲欧洲日本国产| 久久先锋资源| 国产主播精品| 国产精品素人视频| 最新亚洲激情| 久久久av网站| 亚洲欧美国产一区二区三区| 欧美精品成人| 一区二区三区自拍| 小黄鸭精品aⅴ导航网站入口| 亚洲二区在线| 久久影院午夜片一区| 国产精品一区二区女厕厕| 在线观看国产欧美| 久久不射中文字幕| 亚洲一卡久久| 欧美日韩一区自拍| 日韩视频免费观看高清在线视频| 欧美大胆成人| 久久综合一区| 久久精品99久久香蕉国产色戒| 一区二区av在线| 欧美电影免费观看网站| 久久国产精品久久久久久| 国产精品久久久久久久久| 一本一本久久a久久精品综合麻豆| 免费欧美在线视频| 久久久精彩视频| 国产亚洲精品久| 香蕉成人久久| 午夜在线视频一区二区区别| 国产精品久久午夜| 午夜久久美女| 亚洲图片欧美日产| 国产精品视频午夜| 久久电影一区| 久久国产精品久久精品国产| 国产综合香蕉五月婷在线| 久久精品免视看| 欧美伊人久久大香线蕉综合69| 国产精品青草综合久久久久99| 亚洲天堂网在线观看| 亚洲先锋成人| 国产综合精品一区| 欧美mv日韩mv国产网站| 欧美国产日韩二区| 亚洲一区视频在线| 久久av一区| 亚洲国产一二三| 亚洲激情偷拍| 欧美日一区二区在线观看| 午夜精品在线看| 久久综合色天天久久综合图片| 亚洲福利久久| 国产精品99久久久久久www| 国产午夜精品理论片a级大结局| 久久只精品国产| 欧美激情在线观看| 欧美一区二区三区四区在线观看| 欧美伊人影院| 一区二区毛片| 性做久久久久久免费观看欧美| 加勒比av一区二区| 亚洲日产国产精品| 国产伦精品一区二区三区高清版| 麻豆精品一区二区综合av| 欧美xxx成人| 欧美一级理论性理论a| 免费观看久久久4p| 亚洲欧洲99久久| 男同欧美伦乱| 久久久99精品免费观看不卡| 欧美精品一区二区三区一线天视频 | 国产欧美不卡| 亚洲人久久久| 国产一区二区三区在线免费观看| 欧美国产精品专区| 国产日韩在线视频| 9久re热视频在线精品| 久久国产欧美| 国产日韩欧美一区在线| 欧美高清在线观看| 国产精品婷婷| 亚洲美女电影在线| 亚洲国产精品va| 欧美中文在线免费| 亚洲欧美日韩一区二区| 欧美人在线观看| 亚洲国产精品一区制服丝袜| 一区一区视频| 欧美在线视频观看| 欧美一区国产二区| 欧美性久久久| 夜夜嗨av一区二区三区中文字幕 | 在线视频欧美日韩| 美女精品自拍一二三四| 久久综合亚洲社区| 国产精品一区二区三区四区五区| 日韩视频在线观看一区二区| 亚洲人成高清| 免费黄网站欧美| 免费人成网站在线观看欧美高清| 国产日韩精品一区二区| 亚洲视频成人| 性欧美大战久久久久久久久| 欧美午夜精品久久久久久孕妇| 91久久国产综合久久| 影音先锋久久| 美国成人毛片| 亚洲韩国精品一区| av成人免费| 欧美日韩视频一区二区| 日韩一级在线| 亚洲综合丁香| 国产精品一区一区三区| 欧美一级免费视频| 韩国一区二区三区在线观看| 亚洲免费网址| 久久久久久亚洲精品中文字幕| 在线看日韩欧美| 免费高清在线视频一区·| 亚洲国产精品激情在线观看| 夜夜爽夜夜爽精品视频| 欧美午夜视频在线| 新片速递亚洲合集欧美合集| 玖玖玖国产精品| 99re6这里只有精品视频在线观看| 欧美日本精品| 亚洲欧美综合| 欧美h视频在线| 中文欧美日韩| 国产午夜亚洲精品不卡| 久久人人爽爽爽人久久久| 亚洲人成网站色ww在线| 午夜精品国产| 亚洲人午夜精品| 国产精品手机视频| 久久久久久高潮国产精品视| 亚洲精品一区在线| 久久久久国色av免费观看性色| 亚洲日本一区二区| 国产欧美日韩三区| 久久综合给合久久狠狠色 | 激情av一区二区| 欧美人妖在线观看| 欧美专区日韩视频| 午夜综合激情| 国产精品www网站| 久久成人精品一区二区三区| 亚洲激情成人在线| 欧美在线黄色| 99国产欧美久久久精品| 国产在线拍揄自揄视频不卡99| 蜜臀av性久久久久蜜臀aⅴ| 欧美日本韩国| 久久视频这里只有精品| 一区二区三区视频在线看| 每日更新成人在线视频| 亚洲自拍偷拍网址| 亚洲精品国精品久久99热| 国产婷婷精品| 国产精品国产成人国产三级| 欧美大片免费|