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

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>
            久久这里只精品最新地址| 亚洲一区二区伦理| 久久久国产成人精品| 亚洲午夜高清视频| 国产精品手机视频| 久久精品毛片| 久久精品天堂| 亚洲精品美女在线观看播放| 亚洲激情成人网| 欧美日韩一区二区在线观看| 午夜精品美女自拍福到在线| 午夜久久久久| 亚洲全黄一级网站| 99热免费精品| 国产亚洲精久久久久久| 欧美成人精品在线观看| 欧美日韩国产综合一区二区| 欧美亚洲综合久久| 欧美成人一区在线| 午夜在线a亚洲v天堂网2018| 久久青青草综合| 亚洲一区二区视频| 欧美在线播放| 亚洲天堂av电影| 久久久久久久久久久久久女国产乱| 亚洲三级免费电影| 亚洲欧美日韩一区| 亚洲精选国产| 久久久精品日韩| 亚洲一品av免费观看| 欧美一区二区视频97| 亚洲作爱视频| 久久米奇亚洲| 欧美一区二区三区在线观看| 欧美成人第一页| 午夜日韩福利| 欧美精品一区在线| 久久亚洲二区| 国产欧美欧洲在线观看| 亚洲国产婷婷| 一区视频在线播放| 亚洲综合第一页| 亚洲小说区图片区| 欧美成人精品不卡视频在线观看| 欧美伊人久久| 欧美日韩一级片在线观看| 欧美激情精品久久久久久久变态| 国产精品毛片a∨一区二区三区|国 | 亚洲免费观看高清在线观看| 国产啪精品视频| 日韩午夜在线| 一本色道精品久久一区二区三区| 久久久久久夜精品精品免费| 午夜老司机精品| 国产精品福利在线观看| 亚洲激情一区| 亚洲国产成人久久综合一区| 欧美一区二区三区免费大片| 亚洲一区二区在线免费观看| 欧美国产激情| 欧美激情在线观看| 亚洲大胆美女视频| 久久在线观看视频| 老色鬼精品视频在线观看播放| 国产精品一区二区三区成人| 99re6这里只有精品| 亚洲免费久久| 欧美人成免费网站| 99re6热在线精品视频播放速度 | 国产精品国产三级国产专播品爱网| 欧美国产专区| 亚洲人成在线影院| 欧美日韩国产小视频在线观看| 亚洲国产99| 日韩午夜在线播放| 欧美婷婷在线| 亚洲欧美日韩第一区| 久久精品中文字幕免费mv| 国产一二精品视频| 久久久久国内| 亚洲精品1区2区| 亚洲私人影吧| 国产欧美精品日韩精品| 欧美怡红院视频一区二区三区| 久久久久久久久久久成人| 永久免费精品影视网站| 欧美大片在线观看一区| 亚洲另类视频| 午夜精品在线看| 激情成人综合网| 欧美日产国产成人免费图片| 亚洲网在线观看| 美女精品网站| 一本色道久久综合亚洲91| 国产精品观看| 久久久精品视频成人| 亚洲高清视频在线观看| 亚洲午夜视频在线| 狠狠色狠狠色综合系列| 欧美精品二区| 欧美影视一区| 日韩视频永久免费| 久久免费99精品久久久久久| 亚洲日本免费电影| 国产精品一区二区你懂的| 久久尤物电影视频在线观看| 日韩一级黄色片| 久热精品视频| 亚洲欧美视频| 亚洲激情在线观看| 国产视频观看一区| 欧美日韩国产综合新一区| 欧美在线观看一二区| 亚洲精品资源美女情侣酒店| 久久久精品国产一区二区三区| 最新高清无码专区| 国产一区二区成人| 国产精品久久久久久久久久免费 | 国产午夜精品一区二区三区欧美 | 日韩视频在线观看一区二区| 久久国产精品色婷婷| 亚洲伦理自拍| 国产一区二区三区自拍| 欧美天堂亚洲电影院在线观看| 狼人天天伊人久久| 欧美一区二区视频在线| 亚洲先锋成人| 亚洲精品影院在线观看| 欧美成人按摩| 久久久久免费| 性做久久久久久久久| 在线天堂一区av电影| 亚洲人成精品久久久久| 在线观看三级视频欧美| 国产午夜精品在线| 国产欧美一区在线| 国产精品久久午夜夜伦鲁鲁| 欧美日韩在线精品| 欧美日韩色综合| 欧美日本精品| 欧美日韩成人综合天天影院| 欧美激情第8页| 欧美成人dvd在线视频| 免费不卡欧美自拍视频| 免费成人网www| 模特精品在线| 欧美华人在线视频| 欧美日本三区| 欧美日韩色一区| 国产精品电影网站| 国产欧美日韩精品一区| 国产精品视频男人的天堂| 国产精品国产三级国产普通话三级 | 亚洲国产精品久久久久| 亚洲承认在线| 91久久黄色| 99亚洲一区二区| 亚洲一区二区免费视频| 亚洲欧美综合一区| 久久国产精品毛片| 六十路精品视频| 欧美va亚洲va国产综合| 亚洲二区在线视频| 亚洲乱码精品一二三四区日韩在线 | 亚洲欧美影院| 欧美综合第一页| 久热精品在线| 欧美日韩精品系列| 国产色综合天天综合网| 在线精品视频一区二区三四| 亚洲国产精品传媒在线观看| 一区二区三区高清在线| 亚洲欧美另类中文字幕| 久久久亚洲精品一区二区三区 | 欧美国产一区视频在线观看 | 欧美淫片网站| 蜜臀av性久久久久蜜臀aⅴ| 亚洲激情在线激情| 一个色综合av| 久久久精品日韩欧美| 欧美精品v国产精品v日韩精品| 欧美视频中文在线看 | 欧美国产精品久久| 国产精品永久| 亚洲毛片在线| 久久精品日产第一区二区三区| 欧美电影免费观看高清完整版| 99精品福利视频| 久久久精品国产免大香伊 | 久久久久亚洲综合| 欧美色道久久88综合亚洲精品| 狠狠干综合网| 亚洲深夜福利在线| 欧美国产1区2区| 午夜视频久久久| 欧美性猛片xxxx免费看久爱| 亚洲黄色av| 另类专区欧美制服同性| 亚洲制服少妇| 欧美日韩国产精品一区二区亚洲|