游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

第26篇数据库(六)SQL关系表格模型QSqlRelatio

  导语
  QSqlRelationalTableModel继承自QSqlTableModel,并且对其进行了扩展,提供了对外键的支持。一个外键就是一个表中的一个属性和其他表中的主键属性之间的一对一的映射。例如,student表中的course属性对应的是course表中的id属性,那么就称属性course是一个外键。因为这里的course属性的值是一些数字,这样的显示很不友好,使用关系表格模型,就可以将它显示为course表中的name属性的值。
  环境:WindowsXpQt4。8。4QtCreator2。6。2目录一、使用外键二、使用委托正文
  一、使用外键
  1新建QtGui应用,名称为relationalTableModel,基类为QMainWindow,类名为MainWindow。完成后打开relationalTableModel。pro项目文件,将第一行改为:QTcoreguisql
  然后保存该文件。
  2下面向项目中添加新的C头文件connection。h,并更改其内容如下:ifndefCONNECTIONHdefineCONNECTIONHincludeQSqlDatabaseincludeQSqlQuerystaticboolcreateConnection(){QSqlDatabasedbQSqlDatabase::addDatabase(QSQLITE);db。setDatabaseName(database。db);if(!db。open())returnfalse;QSqlQueryquery;query。exec(createtablestudent(idintprimarykey,namevchar,courseint));query。exec(insertintostudentvalues(1,yafei0,1));query。exec(insertintostudentvalues(2,yafei1,1));query。exec(insertintostudentvalues(3,yafei2,2));query。exec(createtablecourse(idintprimarykey,namevchar,teachervchar));query。exec(insertintocoursevalues(1,Math,yafeilinux1));query。exec(insertintocoursevalues(2,English,yafeilinux2));query。exec(insertintocoursevalues(3,Computer,yafeilinux3));returntrue;}endifCONNECTIONH
  在这里建立了两个表,student表中有一项是course,它是int型的,而course表的主键也是int型的。如果要将course项和course表进行关联,它们的类型就必须相同,一定要注意这一点。
  3更改main。cpp文件内容如下:includemainwindow。hincludeQApplicationincludeconnection。hintmain(intargc,charargv〔〕){QApplicationa(argc,argv);if(!createConnection())return1;MainWindoww;w。show();returna。exec();}
  4然后到mainwindow。h文件中,先包含头文件:includeQSqlRelationalTableModel
  然后添加private类型对象声明:QSqlRelationalTableModelmodel;
  5到设计模式,往界面上拖放一个TableView部件。
  6到mainwindow。cpp文件中,在构造函数里添加如下代码:modelnewQSqlRelationalTableModel(this);属性变化时写入数据库modelsetEditStrategy(QSqlTableModel::OnFieldChange);modelsetTable(student);将student表的第三个属性设为course表的id属性的外键,并将其显示为course表的name属性的值modelsetRelation(2,QSqlRelation(course,id,name));modelsetHeaderData(0,Qt::Horizontal,QObject::tr(ID));modelsetHeaderData(1,Qt::Horizontal,QObject::tr(Name));modelsetHeaderData(2,Qt::Horizontal,QObject::tr(Course));modelselect();uitableViewsetModel(model);
  这里修改了model的提交策略,OnFieldChange表示只要属性被改动就马上写入数据库,这样就不需要我们再执行提交函数了。setRelation()函数实现了创建外键,注意它的格式就行了。
  7运行程序,效果如下图所示。
  可以看到Course属性已经不再是编号,而是具体的课程了。关于外键,大家也应该有一定的认识了吧,说简单点就是将两个相关的表建立一个桥梁,让它们关联起来。
  二、使用委托
  有时我们也希望,如果用户更改课程属性,那么只能在课程表中有的课程中进行选择,而不能随意填写课程。Qt中还提供了一个QSqlRelationalDelegate委托类,它可以为QSqlRelationalTableModel显示和编辑数据。这个委托为一个外键提供了一个QComboBox部件来显示所有可选的数据,这样就显得更加人性化了。使用这个委托是很简单的,我们先在mainwindow。cpp文件中添加头文件include,然后继续在构造函数中添加如下一行代码:uitableViewsetItemDelegate(newQSqlRelationalDelegate(uitableView));
  运行程序,效果如下图所示。
  结语
  我们可以根据自己的需要来选择使用哪个模型。如果熟悉SQL语法,又不需要将所有的数据都显示出来,那么只需要使用QSqlQuery就可以了。对于QSqlTableModel,它主要是用来显示一个单独的表格的,而QSqlQueryModel可以用来显示任意一个结果集,如果想显示任意一个结果集,而且想使其可读写,那么建议子类化QSqlQueryModel,然后重新实现flags()和setData()函数。更多相关内容请查看《QtCreator快速入门》第17章。

车钥匙没电了怎么办?我原本以为这个是小概率事件了,没想到很多朋友在问,这个我在公司里面,跑到楼下去,钥匙拿出来发现不灵了,这个门打不开了。回老家那边又好远,怎么去拿备用钥匙,头疼的不行。人家……中国南北分界线上的8座城,当地人都说不清自己是南方人或北方人中国地域辽阔,有南方和北方之分,而划分南北方的依据就是秦岭和淮河,这条中国南北方分界线横跨了甘肃、陕西、河南、安徽、江苏五省,在这条南北分界线上还有8座城,在地理气候、生活习俗……学科目二时把70的练车时间花在了倒车入库上,值吗?您好,很高兴可以给你回答这个问题。我是驾校一点通的赵师傅,从我手里经过的考生,通过率百分之九十九,十个人在我手里学习,只有一个人挂,而那个人基本上是没时间练车。所以很高兴我可以……凯迪拉克的新车价格在238800元,有朋友说这个价格不如买个首先买车要明确用途,不能因为朋友说哪款车好就买哪款,适合自己需求的才是最好的,宝马五系肯定比二十多万凯迪拉克好,但是谁能保证二手车车况完好呢?如果是A级新车和B级二手车(……勇士拒为KD送4将有理怀斯曼两战5帽库穆进攻提升普尔准全明星北京时间7月13日,NBA记者迈克尔施密特曝出凯文杜兰特目前在交易市场上的情况并不乐观,猛龙不愿意在交易中送出巴恩斯,快船鹈鹕直接对杜兰特毫无兴趣,勇士队不愿意在交易中送出穆迪……刘德华演技差?不不不,刘德华的演技在评价当中往往被低估了很多人说刘德华演技差,说周星驰在《赌侠》比刘德华亮眼,所以刘德华不如周星驰;说在《赌神》中刘德华没抢到周润发的戏。周润发在《赌神》中的发挥特别容易出彩,赌神的气势,傻子的傻劲,……马卡报埃托奥被证实是西班牙一名22岁女孩的父亲直播吧2月18日讯据西班牙《马卡报》报道,喀麦隆传奇球星埃托奥近日被证实,是一名22岁的西班牙女孩的父亲。埃托奥与女孩的母亲在1997年马德里的一家迪厅相识,1998年2……奇瑞为什么不改款艾瑞泽M7?这么好的市场都浪费了?不解?一、艾瑞泽M7的前身首先艾瑞泽M7本身就是威麟V5大改款车型,而威麟V5又是奇瑞方之子cross的小改款车型。从不断地改款来看奇瑞还是非常注重这种轿车MPV车型的,毕竟在……带村民共同富裕!新一批广东休闲农业与乡村旅游示范单位出炉2022年3月,广东省农业农村厅、广东省文化和旅游厅联合印发《关于公布2021年度省级休闲农业与乡村旅游示范单位和前八批示范点监测合格名单的通知》(下称《通知》)。广东休……全国有多少个马拉松比赛?最具影响力的前三名是哪个?我的排名:第一名排名北马,第二名排名上马,第三名兰州。根据2018年全国超过800人以上马拉松以及相关赛事统计数量为1581场,预估2019年全年会达到1800场,这个是……市计量所赴中车株洲电机有限公司调研交流株洲新闻网3月22日讯(通讯员罗犟)为推进湖南省电机产业计量测试中心的建设,近日,株洲市计量所组织技术骨干赴中车株洲电机有限公司研究院检测试验中心调研交流。2月16日,湖……山穷水尽?财产被夺账号被封,85岁马玉琴舍弃李玉成换新搭档马玉琴和李玉成这对夫妻一直备受争议,如今他们在一起走过了27年,李玉成从20多岁小伙已步入中年生活,马玉琴也已经85岁高龄,也就是这一年两人27年的幸福戛然而止。原因是马……
<<<<<<>>>>>>
黄洮交汇两河蹁跹至湖畔百美生{黄洮交汇}泾以渭浊,湜湜其沚《诗经邶风谷风》黄河,发源于青藏高原巴颜喀拉山北麓的约古宗列盆地,从横空出世的莽莽天际,从浩瀚的大西北,神秘的丝绸之路,河西走廊……别把这两兄弟搞混了!重置和重装它们不一样相信大家的电脑使用的时间久了都会出现卡顿的现象,久而久之可能连开机、打开个浏览器都要好几分钟了把电脑上的空间释放了又释放,垃圾清了又清还是无济于事。这个时候就应该在系统上……30多家车企集体降价,燃油车没人看得上,网约车绑定新能源汽车如果有关心汽车领域的好兄弟,最近一定有看到这条消息吧。湖北省对东风车系搞了一波政企综合补贴,指导价21。19万的雪铁龙C6共创版降价9万,直接掉到12。19万。9万块的超……怎样用茶证明是万病之药?怎样证明茶是万病之毒?最近有小伙伴问我,怎么证明茶为万病之药?今天就把茶叶是万病之药,是万病之毒的原理说一遍,以正视听。关于茶为万病之药的资料,是在宋代日本荣西禅师的《吃茶养生记》中有明确记载……2022年世界女排锦标赛10月8日晨战报2022年女排世锦赛10月7日晚及10月8日晨进行多场赛事,战况如下(以下时间均为开赛时间):日本队北京时间10月7日20:15,日本30胜波多黎各,三局比分……黑龙江省入选8个!2021年中国美丽休闲乡村名单公布近日,农业农村部发布《关于公布2021年中国美丽休闲乡村名单和20102017年中国美丽休闲乡村监测合格名单的通知》,黑龙江省8个乡村入选2021年中国美丽休闲乡村,10个乡村……钟鼓楼前中轴线的北起点,老北京齐名东四的繁华商业街位于中轴线上的钟楼和鼓楼,北京人并不陌生。作为一种年代久远的报时工具,钟鼓楼见证着北京城几百年来岁月的变迁。在地理位置上,钟鼓楼地区作为元大都城的几何中心、明清北京中轴线……高血压难降,身体熬不住!教你降压五字诀,可以受益终身近年来,随着人们生活方式的改变,生活水平的提高,高血压的发病率也是越来越高。高血压原本是一种常见于中老年人群的慢性疾病,但是由于近年来人们生活压力的提升,所以很多年轻人也都患上……如何让莫桑石手链为自己加分各种各样的首饰是女生的身上不可缺少的首饰,手链同时又是体现女人高雅气质的首饰。女人会戴部分手链来突显自身独特的魅力,那在诸多手链中,我们大家应该怎么样选择适合的手链呢?手……没耐心就不配玩神作!若这样的游戏都欣赏不来,你还是玩手游去吧如果你是日系RPG的老玩家,那么相信多多少少听过《异度神剑》这个经典的游戏系列。玩过前几部作品的作玩家应该的都知道,系列向来质量很高,而且已经达到了神作的水平,绝对是如今JRP……中国失去举办权,23年亚洲杯落地卡塔尔,两千亿办两次足球赛值定在家门口的亚洲杯却改为了卡塔尔,实属有点可惜。本是个和国际足球赛事再次接轨交流的机会,往后中国举办国际性体育大赛的可能性都将大大降低,甚至亚洲杯的易地举办会导致中国足球会过上……孩子身高30受后天因素影响,家长应该怎么做?来源:【人民日报健康客户端】孩子身高受多因素影响,首先是遗传因素占70以上,但后天的营养、睡眠、运动、内分泌、心理以及疾病等因素也是不能忽视的。陕西省宝鸡市妇幼保健院儿童……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网