Qt 数据库之 QSqlRelationalTableModel

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lewanhah01/article/details/50630593

QSqlRelationalTableModel *model;

 model->setTable("employee"); //设置操作的表

model->setEditStrategy(QSqlTableModel::OnManualSubmit); 

 //QSqlTableModel::OnManualSubmit是枚举类型,在这里的意思是:模型中的所有更改将被缓存,直到submitAll()或revertAll()!

model->setRelation(2, QSqlRelation("city", "id", "name")); 

//2表示employee表中第2个段中成员将使用热键,city在这里是表名(即热键将使用city这个表,id是索引,name是热键显示的内容)。
model->setRelation(3, QSqlRelation("country", "id", "name"));

model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));   //设置employee表第一个段的别名

 model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));  //第二个段的别名

 model->setHeaderData(2, Qt::Horizontal, QObject::tr("City"));//第三个段的别名

 model->setHeaderData(3, Qt::Horizontal, QObject::tr("Country"));//第四个段的段的别名

  model->select(); //往表中填充内容

看到这里可知一共有三个表,分别是employee,city,country,这三个表的创建过程如下如下:

    QSqlQuery query;
    //创建表emlpoyee,有id,name,city,country这几个段	
    query.exec("create table employee(id int primary key, name varchar(20), city int, country int)");
    query.exec("insert into employee values(1, 'Espen', 5000, 47)");
    query.exec("insert into employee values(2, 'Harald', 80000, 49)");
    query.exec("insert into employee values(3, 'Sam', 100, 1)");
   // 创建表city
    query.exec("create table city(id int, name varchar(20))");
    query.exec("insert into city values(100, 'San Jose')");
    query.exec("insert into city values(5000, 'Oslo')");
    query.exec("insert into city values(80000, 'Munich')");
     //创建表country
 
query.exec("create table country(id int, name varchar(20))");
    query.exec("insert into country values(1, 'USA')");
    query.exec("insert into country values(47, 'Norway')");
    query.exec("insert into country values(49, 'Germany')");
程序输出结果如下:
 
 
 
在employee中id为1的项city值为5000,而它在表中对应默认的city为“Oslo”,“Oslo”对应的id为5000,这里说明id作为一个索引值,employee中的city段应该个city表中的id是一一对应的。
 
 

猜你喜欢

转载自blog.csdn.net/lewanhah01/article/details/50630593