专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

第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章。

科莫多巨蜥的毒液到底有多可怕?2009年,一名31岁的渔民安瓦尔,在印尼科莫多岛上采摘水果,结果不小心从水果树上掉了下来,刚好踩到了一只巨型蜥蜴,蜥蜴瞬间就朝他扑了过去,咬住了他的腿,之后又咬住了他的手臂,身体武汉未来的房价会涨到100000元平米吗?这个问题的答案是肯定的!以目前的趋势,未来武汉房价必然达到10万的水平,只是时间长短的问题。2010年至2017年,短短七年间,武汉的房价已经翻了3番,目前,武汉部分高端楼盘如洞庭兰州青白石片区,中央公园怎么样?兰州北拓的黄金区域,目前基础交通还跟不上建设需要,交通滞后可能会成为十四五期间兰州青白石片区发展的的最大障碍!不过就兰州地理位置和城区格局而言,青白石片区是离主城区最近的待开发区域农民为什么不在国家统计失业范围之内?中国有四个儿子,大儿子叫工人,二儿子叫子弟兵,三儿子叫公务员,四儿子叫农民,所以四儿子就没有纳入统计失业包括养老金范围,因为四儿子有金山银山还有三分地。农民有土地,这是农民可以赖以农村成立社区是什么意思?很多农村驻有村委会办公室,同时也驻有社区管理委员会办公室,特别是在城市郊区的农村和街道的农村都同时设立了村委会和社区管理委员会,很多人弄不明白是怎么回事。那农村成立社区是什么意思呢农村里的剩男,为何一剩再剩呢?到底是什么原因?男女比例失调。计划生育只要一个孩子时,受封建思想影响,都拚命要男孩,等他们长大了,很难找到媳妇。一,农村姑娘远嫁,二,女孩见少,三,彩礼高,四,剩男挣钱少。我就一大龄剩男!个人亲身抖音付费直播试水,看直播要给钱了?我们应该如何思考?使劲收,最好是家人们看的话,一分钟100块钱。毕竟粉丝听话的很。毕竟人设都设计好了打PK,卖货摆错价格,怒亏2个亿回馈粉丝。没事就怼工厂,怼员工反正就是赔钱回馈粉丝。赔完还得补交税马上就要退休了,退休工资才3650元太少了,怎么办?3600不少了。我企业工龄32年,退休时退休金只有2200,涨了这么多年还不到3000。知足常乐吧!如果身体不好,这些钱也够生活了,如果身体还可以,就找一些力所能及的工作,打打工补南宁五象新区未来的发展潜力很大吗?五象新区无法成为国家级新区!!!目前看来,五象新区的潜力也就这样了。我们对比一下贵阳的贵安新区,贵安新区的面积是1700平方公里,由贵阳市的郊区和安顺市合并得来。是全国第8个国家级如果把三峡大坝加高10米,截留更多的洪水,可行吗?我国的三峡大坝,作为当今世界上最大的水利枢纽工程,位于湖北省宜昌市上游,距下游葛洲坝水电站38公里,三峡大坝全长2309米高185米,呈梯形形状,集发电旅游航运调控洪水于一身。三峡大家有经历过亲人去世吗?是怎样走出痛苦和想念的?2018年9月1日下午3点8分,我的妻子在医院里停止了呼吸。她的眼睛没有闭上,我流着泪,帮她合上了双眼。我永远失去了我最亲近的爱人,孩子永远的失去了妈妈。一位好妻子,好女儿,好姑妈
不要低估中国实力!外媒今年经济增速将独领风骚2023年,中国经济将大放异彩(资料图)中国日报网1月13日电(党超峰)道琼斯通讯社报道,在强劲出口的推动下,中国2022年贸易顺差创历史新高。这一年的大部分时间里,到最后一个季度优势区域走在前南京都市圈高质量发展见闻产业创新融合协同,基础设施互联互通,公共服务便利共享近两年来,在跨越苏皖两省的南京都市圈,融合不断加速,一体化程度持续提升,高质量发展蹄疾步稳。强协同之举走融合之路增共赢之效。20埃德蒙哈雷1742年1月14日,埃德蒙哈雷去世。埃德蒙哈雷,英国天文学家地理学家数学家气象学家和物理学家,曾任牛津大学几何学教授,第二任格林尼治天文台台长。他把牛顿定律应用到彗星运动上,并正核动力探索深空的澎湃能源来源西安科普网能源利用在近地轨道上,空间站这类大型航天器依靠数块大面积太阳翼提供电能补给,然而在更加遥远黑暗的深空中,太阳神的光辉却难以抵达,因此航天器开展深空探秘旅程之前,有必要视频会员吐槽大会,盘点那些年踩过的坑涨价的同时服务却跟不上手机与电视双会员惹争议取消自动续费不好找会员专属广告层出不穷的视频坑,你踩过几个?开篇的话连年上涨的会员费手机与电视不同步超前点播还得续费版权限制导致用户来回平台企业迎利好,节前登上三千三?(木棉花开于小黎摄)今日上证指数果然冲上3200点,最高居然冲到了3251点,按照这个力度,春节前有可能冲上3300点了!当然,北上资金功不可没,一个劲地买买买,今日大幅净买入15蚂蚁集团内部消息,上市倒计时?有人花800万买别墅被套3年!蚂蚁集团内部消息,有人已经开始欢庆蚂蚁集团上市倒计时了,这个消息是真的吗?这个消息当然不是凭空而来的,是有来源的。但是上市倒计时这个说法,你们可能真的想多了。恐怕事情不是想象的那么特斯拉成本逐渐下降,油车将加速退出转发最近消息!特斯拉在社交平台表示特斯拉4680电池周产量超86万块,成本再降54!新车还要降价!!预示着,特斯拉4680电池量产后,特斯拉的车还会再降价。政策和市场双击下,油车加以创新开放,著资本篇章科大讯飞董事会秘书江涛科大讯飞(股票代码002230)是知名的智能语音和人工智能上市企业。公司自创业以来持续聚焦智能语音自然语言理解机器学习推理及自主学习等人工智能核心技术研究并始低估的轨道基建龙头公司是全球最大工程承包商前二位,中国铁路基建城市轨道交通基建领域总龙头,拥有多项工程领域的最高资质。公司是中老铁路印尼雅万高铁匈塞铁路孟加拉帕德玛大桥的主要承包商。中国中铁股份有限肥城向绿而行打造新型工业化强市厂区上空,白色的水雾蒸腾着火热的发展场景生产车间,漂白的晶体盐在传送带上飞驰物流园里,一辆辆满载产品的大货车列队整装待发2022年,公司在环保改造上投入2000余万元,研发方面投入
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网