书签 分享 收藏 举报 版权申诉 / 94
上传文档赚钱

类型Qt-5开发及实例-第13章-Qt-5数据库课件.pptx

  • 上传人(卖家):晟晟文业
  • 文档编号:5101742
  • 上传时间:2023-02-11
  • 格式:PPTX
  • 页数:94
  • 大小:2.04MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《Qt-5开发及实例-第13章-Qt-5数据库课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Qt 开发 实例 13 数据库 课件
    资源描述:

    1、第第13章章 Qt 5数据库数据库数据库基本概念数据库基本概念1数据和数据库(数据和数据库(DB)利用计算机进行数据处理,首先需要将信息以数据形式存储到计算机中,因为数据是可以被计算机接收和处理的符号。根据所表示的信息特征不同,数据有不同的类别,如数字、文字、表格、图形/图像和声音等。数据库(DataBase,DB),顾名思义,就是存放数据的仓库,其特点是:数据按照数据模型组织,是高度结构化的,可供多个用户共享并且具有一定的安全性。2数据库管理系统(数据库管理系统(DBMS)数据库管理系统(DataBase Management System,DBMS),是位于用户应用程序和操作系统之间的数据

    2、库管理系统软件,其主要功能是组织、存储和管理数据,高效地访问和维护数据,即提供数据定义、数据操纵、数据控制和数据维护等功能。常用的数据库管理系统有Oracle、Microsoft SQL Server和MySQL等。数据库系统(DataBase System,DBS),是指按照数据库方式存储和维护数据,并向应用程序提供数据访问接口的系统。DBS通常由数据库、计算机硬件(支持DB存储和访问)、软件(包括操作系统、DBMS及应用开发支撑软件)和数据库管理员(DataBase Administrator,DBA)四个部分组成。其中,DBA是控制数据整体结构的人,负责数据库系统的正常运行,承担创建、监

    3、控和维护整个数据库结构的责任。DBA必须具有的素质是,熟悉所有数据的性质和用途,充分了解用户需求,对系统性能非常熟悉。3结构化查询语言(结构化查询语言(SQL)SQL语言由以下三部分组成。(1)数据定义语言(Data Description Language,DDL),用于执行数据库定义的任务,对数据库及数据库中的各种对象进行创建、删除和修改等操作。数据库对象主要包括表、默认约束、规则、视图、触发器和存储过程等。(2)数据操纵语言(Data Manipulation Language,DML),用于操纵数据库中各种对象,检索和修改数据。(3)数据控制语言(Data Control Langua

    4、ge,DCL),用于安全管理,确定哪些用户可以查看或修改数据库中的数据。4表和视图表和视图(1)表()表(Table)。)。表是在日常工作和生活中经常使用的一种表示数据及其关系的形式,如表13.1为一个学生表。学 号姓 名专 业 名性 别出 生 时 间170201王 一计算机男1998/10/01170202王 巍计算机女1999/02/08170302林 滔电子工程男1998/04/06170303江为中电子工程男2001/12/084表和视图表和视图 表结构表结构每个数据库包含若干个表。每个表具有一定的结构,称为表的“型”。所谓表型是指组成表的各列的名称及数据类型,也就是日常表格的“栏目信

    5、息”。记录记录每个表包含若干行数据,它们是表的“值”,表中的一行称为一个记录(Record)。因此,表是记录的有限集合。字段字段每个记录由若干个数据项构成,将构成记录的每个数据项称为字段(Field)。字段包含的属性有字段名、字段数据类型、字段长度及是否为关键字等。其中,字段名是字段的标识,字段的数据类型可以是多样的,如整型、实型、字符型、日期型或二进制型等。关键字关键字在学生表中,若不加以限制,则每条记录的姓名、专业名、性别和出生时间这四个字段的值都有可能相同,但是学号字段的值对表中所有记录来说则一定不同,即通过“学号”字段可以将表中的不同记录区分开来。4表和视图表和视图若某字段或字段组合不

    6、是数据库中A表的关键字,但它是数据库中另外一个表即B表的关键字,则称该字段或字段组合为A表的外关键字(Foreign key)。例如,设学生数据库有三个表,即学生表、课程表和学生成绩表,其结构分别如下:学生表(学号,姓名,专业名,性别,出生时间)课程表(课程号,课程名,学分)学生成绩表(学号,课程号,分数)(用下画线表示的字段或字段组合为关键字。)4表和视图表和视图(2)视图()视图(View)。)。视图是从一个或多个表(或视图)导出的表。视图与表不同,它是一个虚表,即对视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义操作与视图相关联的基本表

    7、。视图一经定义后,就可以像表一样被查询、修改、删除和更新。使用视图具有便于数据共享、简化用户权限管理和屏蔽数据库的复杂性等优点。例如,对于以上所述学生数据库,可创建“学生选课”视图,该视图包含学号、姓名、课程号、课程名、学分和成绩字段。第第13章章 Qt 5数据库数据库常用常用SQL命令命令1SELECT语句语句2常用聚合函数常用聚合函数0101数数 据据 查查 询询1SELECT语句语句完备的SELECT语句很复杂,其主要的子句如下:SELECT DISTINCT 别名.字段名或表达式 AS 列标题/*指定要选择的列或行及其限定*/(a)FROM table_source /*FROM子句,

    8、指定表或视图*/WHERE search_condition /*WHERE子句,指定查询条件*/(b)GROUP BY group_by_expression /*GROUP BY子句,指定分组表达式*/ORDER BY order_expression ASC|DESC /*ORDER BY子句,指定排序表达式和顺序*/(c)1SELECT语句语句其中,其中,SELECT和FROM子句是不可缺少的。(a)SELECT子句指出查询结果中显示的字段名,以及字段名和函数组成的表达式等。子句指出查询结果中显示的字段名,以及字段名和函数组成的表达式等。可用DISTINCT去除重复的记录行;AS列标题

    9、指定查询结果显示的列标题。当要显示表中所有字段时,可用通配符“*”代替字段名列表。(b)WHERE子句定义了查询条件。子句定义了查询条件。WHERE子句必须紧跟FROM子句,其基本格式为:WHERE 其中,其中,search_condition为查询条件,常用格式为:NOT|()AND|OR NOT|(),n 其中的predicate为判定运算,结果为TRUE、FALSE或UNKNOWN,格式为:expression =|=|!=|!expression /*比较运算*/|string_expression NOT LIKE string_expression ESCAPE escape_ c

    10、haracter /*字符串模式匹配*/|expression NOT BETWEEN expression AND expression/*指定范围*/|expression IS NOT NULL /*是否空值判断*/|expression NOT IN(subquery|expression,n)/*IN子句*/|expression =|=|!=|!ALL|SOME|ANY (subquery)/*比较子查询*/|EXIST(subquery)/*EXIST子查询*/1SELECT语句语句(c)GROUP BY子句和子句和ORDER BY子句分别对查询结果进行分组和排序。子句分别对查询

    11、结果进行分组和排序。下面用示例说明使用SQL语句对Student数据库进行的各种查询。(1)查询Student数据库。查询students表中每个同学的姓名和总学分。USE Student SELECT name,totalscore FROM students(2)查询表中所有记录。查询students表中每个同学的所有信息。SELECT*FROM students(3)条件查询。查询students表中总学分大于或等于120的同学的情况。SELECT*FROM students WHERE totalscore=120(4)多重条件查询。查询students表中所在系为“计算机”且总学分大

    12、于或等于120的同学的情况。SELECT*FROM students WHERE department=计算机 AND totalscore=120(5)使用LIKE谓词进行模式匹配。查询students表中姓“王”且单名的学生情况。SELECT*FROM students WHERE name LIKE 王_(6)用BETWEENAND指定查询范围。查询students表中不在1999年出生的学生情况。SELECT*FROM students WHERE birthday NOT BETWEEN 1999-1-1 and 1999-12-311SELECT语句语句(7)空值比较。查询总学分尚

    13、不确定的学生情况。SELECT*FROM students WHERE totalscore IS NULL(8)自然连接查询。查找计算机系学生姓名及其“C程序设计”课程的考试分数情况。SLELCT name,grade FROM students,courses,grades,WHERE department=计算机 AND coursename=C程序设计 AND students.studentid=grades.studentid AND courses.courseid=grades.coursesid1SELECT语句语句(9)IN子查询。查找选修了课程号为101的学生情况。SEL

    14、ECT*FROM studentsWHERE studentid IN (SELECT studentid FROM courses WHERE courseid=101)在执行包含子查询的SELECT语句时,系统首先执行子查询,产生一个结果表,再执行外查询。本例中,首先执行子查询:SELECT studentid FROM courses,students,grades WHERE courseid=101 AND students.studentid=grades.studentid AND courses.courseid=grades.coursesid得到一个只含有studentid

    15、列的结果表,courses中courseid列值为101的行在该结果表中都有一行。再执行外查询,若students表中某行的studentid列值等于子查询结果表中的任意一个值,则该行就被选择到最终结果表中。1SELECT语句语句(10)比较子查询。这种子查询可以认为是IN子查询的扩展,它是表达式的值与子查询的结果进行比较运算。查找课程号206的成绩不低于课程号101的最低成绩的学生学号。SELECT studentid FROM grades WHERE courseid=206 AND grade!ANY (SELECT grade FROM grades WHERE courseid=1

    16、01)(11)EXISTS子查询。EXISTS谓词用于测试子查询的结果集是否为空表,若子查询的结果集不为空,则EXISTS返回TRUE,否则返回FALSE。EXISTS还可与NOT结合使用,即NOT EXISTS,其返回值与EXISTS刚好相反。查找选修206号课程的学生姓名。SELECT name FROM students WHERE EXISTS (SELECT*FROM grades WHERE studentid=students.studentid AND courseid=206)1SELECT语句语句(12)查找选修了全部课程的同学姓名(查找没有一门功课不选修的学生)。SELE

    17、CT name FROM students WHERE NOT EXISTS (SELECT*FROM courses WHERE NOT EXISTS (SELECT*FROM grades WHERE studentid=students.studentid AND courseid=courses.courseid)(13)查询结果分组。将各课程成绩按学号分组。SELECT studentid,grade FROM grades GROUP BY studentid(14)查询结果排序。将计算机系的学生按出生时间先后排序。SELECT*FROM students WHERE depart

    18、ment=计算机 ORDER BY birthday2常用聚合函数常用聚合函数在对表数据进行检索时,经常需要对结果进行汇总或计算,如在学生成绩数据库中求某门功课的总成绩、统计各分数段的人数等。聚合函数用于计算表中的数据,返回单个计算结果。常用的聚合函数见表13.2。函 数 名说 明AVG求组中值的平均值COUNT求组中项数,返回int类型整数MAX求最大值MIN求最小值SUM返回表达式中所有值的和VAR返回给定表达式中所有值的统计方差2常用聚合函数常用聚合函数本例对students表执行查询,使用常用的聚合函数。(1)求选修课程101的学生的平均成绩。SELECT AVG(grade)AS 课

    19、程101平均成绩 FROM grades WHERE courseid=101(2)求选修课程101的学生的最高分和最低分。SELECT MAX(grade)AS 课程101最高分,MIN(grade)AS 课程101最低分 FROM grades WHERE courseid=101(3)求学生的总人数。SELECT COUNT(*)AS 学生总数 FROM students1插入数据语句插入数据语句INSERT2删除数据语句删除数据语句DELETE0202数数 据据 操操 作作3更新数据语句更新数据语句UPDATE1插入数据语句插入数据语句INSERTINSERT语句可添加一条或多条记录至

    20、一个表中。INSERT语句有两种语法形式。语法语法1:INSERT INTO target IN externaldatabase(fields_list)/(a)DEFAULT VALUES|VALUES(DEFAULT|expression_list)/(b)语法语法2:INSERT INTO target IN externaldatabase fields_listSELECT.|EXECUTE.其中,其中,(a)target是欲追加记录的表(Table)或视图(View)的名称,externaldatabase是外部数据库的路径和名称。(b)expression_list:需要插入的

    21、字段值表达式列表,其个数应与记录的字段个数一致,若指定要插入值的字段fields_list,则应与fields_list的字段个数相一致。使用第1种形式将一个记录或记录的部分字段插入表或视图中。第2种形式的INSERT语句插入来自SELECT语句或来自使用EXECUTE语句执行的存储过程的结果集。例如,例如,用以下语句向students表添加一条记录:INSERT INTO students VALUES(170206,罗亮,0,1/30/1998,1,150)2删除数据语句删除数据语句DELETEDELETE语句用于从一个或多个表中删除记录。DELETE语句的语法格式如下:DELETE FR

    22、OM table_namesWHERE.例如,例如,用以下语句从students表中删除姓名为“罗亮”的记录:DELETE FROM students WHERE name=罗亮3更新数据语句更新数据语句UPDATEUPDATE语句用于更新表中的记录。UPDATE语句的语法格式如下:UPDATE table_nameSET Field_1=expression_1,Field_2=expression_2.FROM table1_name|view1_name,table2_name|view2_name.WHERE.其中,其中,Field是需要更新的字段,expression表示要更新字段的

    23、新值表达式。例如,例如,以下语句将计算机系学生的总分增加10:UPDATE studentsSET totalscore=totalscore+10WHERE department=计算机第第13章章 Qt 5数据库数据库Qt操作数据库及实例操作数据库及实例Qt操作数据库及实例操作数据库及实例这个模块由不同Qt类支撑的三部分组成,QtSql模块层次结构见表13.3。层 次描 述驱动层实现了特定数据库与SQL接口的底层桥接,包括的支持类有QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin和QSqlResultSQ

    24、L接口层QSqlDatabase类提供了数据库访问、数据库连接操作,QSqlQuery类提供了与数据库的交互操作,其他支持类有QSqlError、QSqlField、QSqlTableModel和QSqlRecord用户接口层提供从数据库数据到用于数据表示的窗体的映射,包括的支持类有QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel,这些类均依据Qt的模型/视图结构设计0101Qt操作操作SQLite数据库数据库Qt操作操作SQLite数据库数据库Qt提供了一种进程内数据库SQLite。它小巧灵活,无须额外安装配置且支持大部分ANSI

    25、SQL92标准,是一个轻量级的数据库,概括起来具有以下优点。(1)SQLite的设计目的是实现嵌入式SQL数据库引擎,它基于纯C语言代码,已经应用在非常广泛的领域内。(2)SQLite在需要持久存储时可以直接读写硬盘上的数据文件,在无须持久存储时也可以将整个数据库置于内存中,两者均不需要额外的服务器端进程,即SQLite是无须独立运行的数据库引擎。(3)开放源代码,整套代码少于3万行,有良好的注释和90%以上的测试覆盖率。(4)少于250KB的内存占用容量(gcc编译情况下)。(5)支持视图、触发器和事务,支持嵌套SQL功能。(6)提供虚拟机用于处理SQL语句。(7)不需要配置,不需要安装,也

    26、不需要管理员。(8)支持大部分ANSI SQL92标准。(9)大部分应用的速度比目前常见的客户端/服务器结构的数据库快。(10)编程接口简单易用。Qt操作操作SQLite数据库数据库【例】【例】(难度中等)(CH1301)基于控制台的程序,使用SQLite数据库完成大批量数据的增加、删除、更新和查询操作并输出。操作步骤如下。(1)在“QSQLiteEx.pro”文件中添加如下代码:QT+=sql(2)源文件“main.cpp”的具体代码。其中,其中,(a)QSqlDatabase db=QSqlDatabase:addDatabase(QSQLITE):以“QSQLITE”为数据库类型,在本进

    27、程地址空间内创建一个SQLite数据库。此处涉及的知识点有以下两点。在进行数据库操作之前,必须首先建立与数据库的连接。数据库连接由任意字符串标识。在没有指定连接的情况下,QSqlDatabase可以提供默认连接供Qt其他的SQL类使用。建立一条数据库连接的代码如下:QSqlDatabase db=QSqlDatabase:addDatabase(QSQLITE);db.setHostName(easybook-3313b0);/设置数据库主机名db.setDatabaseName(qtDB.db);/设置数据库名db.setUserName(zhouhejun);/设置数据库用户名db.set

    28、Password(123456);/设置数据库密码db.open();/打开连接Qt操作操作SQLite数据库数据库其中,其中,静态函数QSqlDatabase:addDatabase()返回一条新建立的数据库连接,其原型为:QSqlDatabase:addDatabase(const QString&type,const QString&connectionName=QLatin1String(defaultConnection)参数type为驱动名,本例使用的是QSQLITE 驱动。参数connectionName为连接名,默认值为默认连接,本例的连接名为connect。如果没有指定此参数

    29、,则新建立的数据库连接将成为本程序的默认连接,并且可以被后续不带参数的函数database()引用。如果指定了此参数(连接名),则函数database(connectionName)将获取这个指定的数据库连接。Qt操作操作SQLite数据库数据库 QtSql模块使用驱动插件(driver plugins)与不同的数据库接口通信。由于QtSql模块的应用程序接口是与具体数据库无关的,所以所有与数据库相关的代码均包含在这些驱动插件中。目前,Qt支持的数据库驱动插件见表13.4。驱 动数据库管理系统QDB2IBM DB2及其以上版本QIBASEBorland InterBaseQMYSQLMySQL

    30、QOCIOracle Call Interface DriverQODBCOpen Database Connectivity(ODBC)包括Microsoft SQL Server和其他ODBC兼容数据库QPSQLPostgreSQL版本6.x和7.xQSQLITESQLite版本3及其以上版本QSQLITE2SQLite版本2QTDSSybase Adaptive ServerQt操作操作SQLite数据库数据库(b)db.setDatabaseName(qtDB.db):以上创建的数据库以“qtDB.db”为数据库名。它是SQLite在建立内存数据库时唯一可用的名字。(c)QSqlQue

    31、ry query:创建QSqlQuery对象。QtSql模块中的QSqlQuery类提供了一个执行SQL语句的接口,并且可以遍历执行的返回结果集。除QSqlQuery类外,Qt还提供了三种用于访问数据库的高层类,即QSqlQueryModel、QSqlTableModel和QSqlRelationTableModel。它们无须使用SQL语句就可以进行数据库操作,而且可以很容易地将结果在表格中表示出来。访问数据库的高层类见表13.5。类 名用 途QSqlQueryModel基于任意SQL语句的只读模型QsqlTableModel基于单个表的读写模型QSqlRelationalTableModel

    32、QSqlTableModel的子类,增加了外键支持(d)bool success=query.exec(create table automobil):创建数据库表“automobil”,该表具有10个字段。在执行exec()函数调用后,就可以操作返回的结果了。(e)query.prepare(insert into automobil values(?,?,?,?,?,?,?,?,?,?):如果要插入多条记录,或者避免将值转换为字符串(即正确地转义),则可以首先调用prepare()函数指定一个包含占位符的query,然后绑定要插入的值。Qt对所有数据库均可以支持Qracle类型的占位符和O

    33、DBC类型的占位符。此处使用了ODBC类型的定位占位符。Qt操作操作SQLite数据库数据库等价于使用Oracle语法的有名占位符的具体形式如下:query.prepare(insert into automobile(id,attribute,type,kind,nation,carnumber,elevaltor,distance,oil,temperature)values(:id,:attribute,:type,:kind,:nation,:carnumber,:elevaltor,:distance,:oil,:temperature);long records=100;for(i

    34、nt i=0;irecords;i+)query.bindValue(:id,i);query.bindValue(:attribute,四轮);query.bindValue(:type,轿车);query.bindValue(:kind,富康);query.bindValue(:nation,rand()%100);query.bindValue(:carnumber,rand()%10000);query.bindValue(:elevaltor,rand()%300);query.bindValue(:distance,rand()%200000);query.bindValue(:o

    35、il,rand()%52);query.bindValue(:temperature,rand()%100);Qt操作操作SQLite数据库数据库(f)query.bindValue(0,i):调用bindValue()或addBindValue()函数绑定要插入的值。(g)success=query.exec():调用exec()函数在query中插入对应的值,之后,可以继续调用bindValue()或addBindValue()函数绑定新值,然后再次调用exec()函数在query中插入新值。(h)qDebug()QObject:tr(插入插入%1 条记录,耗时:条记录,耗时:%2 ms)

    36、.arg(records).arg(t.elapsed():向表中插入任意的100条记录,操作成功后输出操作消耗的时间。(i)success=query.exec(select*from automobil order by id desc):按id字段的降序将查询表中刚刚插入的100条记录进行排序。(j)query.prepare(QString(update automobil set):更新操作与插入操作类似,只是使用的SQL语句不同。(k)query.exec(delete from automobil where id=15):执行删除id为15的记录的操作。Qt操作操作SQLite

    37、数据库数据库(3)打开“QSQLiteEx.pro”文件,添加语句:QT+=sql(4)运行结果如图13.1所示。1主界面布局主界面布局2连接数据库连接数据库0202Qt操作主操作主/从视图及从视图及XML3主主/从视图应用从视图应用4添加记录功能添加记录功能Qt操作主操作主/从视图及从视图及XML【例】【例】(难度中上)(CH1302)以主/从视图的模式展现汽车制造商与生产汽车的关系。当在汽车制造商表中选中某一个制造商时,下面的汽车表中将显示出该制造商生产的所有产品。当在汽车表中选中某个车型时,右边的列表将显示出该车的车型和制造商的详细信息,所不同的是,车型的相关信息存储在XML文件中。1主

    38、界面布局主界面布局(1)主窗口MainWindow类继承自QMainWindow类,定义了主显示界面,头文件“mainwindow.h”的具体代码如下:#include#include#include#include#include class MainWindow:public QMainWindow Q_OBJECTpublic:MainWindow(QWidget*parent=0);MainWindow();private:QGroupBox*createCarGroupBox();QGroupBox*createFactoryGroupBox();QGroupBox*createDe

    39、tailsGroupBox();void createMenuBar();QTableView*carView;/(a)QTableView*factoryView;/(b)QListWidget*attribList;/显示车型的详细信息列表/*声明相关的信息标签*/QLabel*profileLabel;QLabel*titleLabel;1主界面布局主界面布局其中,其中,(a)QTableView*carView:显示汽车的视图。QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel类均可以作为数据源在Qt的视图类中表示,如QList

    40、View、QTableView和QTreeView等视图类。其中,QTableView类最适合表示二维的SQL操作结果。视图类可以显示一个水平表头和一个垂直表头。水平表头在每列之上显示一个列名,默认情况下,列名就是数据库表的字段名,可以通过setHeaderData()函数修改列名。垂直表头在每行的最左侧显示本行的行号。如果调用QSqlTableModel:insertRows()函数插入了一行,那么新插入行的行号将被标以星号(“*”),直到调用了submitAll()函数进行提交或系统进行了自动提交。如果调用QSqlTableModel:removeRows()函数删除了一行,则这一行将被标

    41、以感叹号(“!”),直到提交。还可以将同一个数据模型用于多个视图,一旦用户通过其中某个视图编辑了数据模型,其他视图也会立即随之得到更新。(b)QTableView*factoryView:显示汽车制造商的视图。1主界面布局主界面布局(2)源文件“mainwindow.cpp”的具体内容如下:#include mainwindow.h#include#include#include#include#include#include MainWindow:MainWindow(QWidget*parent):QMainWindow(parent)QGroupBox*factory=createFac

    42、toryGroupBox();QGroupBox*cars=createCarGroupBox();QGroupBox*details=createDetailsGroupBox();/布局 QGridLayout*layout=new QGridLayout;layout-addWidget(factory,0,0);layout-addWidget(cars,1,0);layout-addWidget(details,0,1,2,1);layout-setColumnStretch(1,1);layout-setColumnMinimumWidth(0,500);QWidget*widge

    43、t=new QWidget;widget-setLayout(layout);setCentralWidget(widget);createMenuBar();resize(850,400);setWindowTitle(tr(主从视图);1主界面布局主界面布局createFactoryGroupBox()函数的具体内容如下:QGroupBox*MainWindow:createFactoryGroupBox()factoryView=new QTableView;factoryView-setEditTriggers(QAbstractItemView:NoEditTriggers);/(a

    44、)factoryView-setSortingEnabled(true);factoryView-setSelectionBehavior(QAbstractItemView:SelectRows);factoryView-setSelectionMode(QAbstractItemView:SingleSelection);factoryView-setShowGrid(false);factoryView-setAlternatingRowColors(true);QGroupBox*box=new QGroupBox(tr(汽车制造商);QGridLayout*layout=new QG

    45、ridLayout;layout-addWidget(factoryView,0,0);box-setLayout(layout);return box;其中,其中,(a)factoryView-setEditTriggers(QAbstractItemView:NoEditTriggers):对于可读写的模型类QSqlTableModel和QSqlRelationalTableModel,视图允许用户编辑其中的字段,也可以通过调用此语句禁止用户编辑。1主界面布局主界面布局createCarGroupBox()函数的具体代码如下:QGroupBox*MainWindow:createCarGr

    46、oupBox()QGroupBox*box=new QGroupBox(tr(汽车);carView=new QTableView;carView-setEditTriggers(QAbstractItemView:NoEditTriggers);carView-setSortingEnabled(true);carView-setSelectionBehavior(QAbstractItemView:SelectRows);carView-setSelectionMode(QAbstractItemView:SingleSelection);carView-setShowGrid(false

    47、);carView-verticalHeader()-hide();carView-setAlternatingRowColors(true);QVBoxLayout*layout=new QVBoxLayout;layout-addWidget(carView,0,0);box-setLayout(layout);return box;1主界面布局主界面布局createDetailsGroupBox()函数的具体代码如下:QGroupBox*MainWindow:createDetailsGroupBox()QGroupBox*box=new QGroupBox(tr(详细信息);profi

    48、leLabel=new QLabel;profileLabel-setWordWrap(true);profileLabel-setAlignment(Qt:AlignBottom);titleLabel=new QLabel;titleLabel-setWordWrap(true);titleLabel-setAlignment(Qt:AlignBottom);attribList=new QListWidget;QGridLayout*layout=new QGridLayout;layout-addWidget(profileLabel,0,0,1,2);layout-addWidget

    49、(titleLabel,1,0,1,2);layout-addWidget(attribList,2,0,1,2);layout-setRowStretch(2,1);box-setLayout(layout);return box;1主界面布局主界面布局createMenuBar()函数的具体代码如下:void MainWindow:createMenuBar()QAction*addAction=new QAction(tr(添加),this);QAction*deleteAction=new QAction(tr(删除),this);QAction*quitAction=new QAct

    50、ion(tr(退出),this);addAction-setShortcut(tr(Ctrl+A);deleteAction-setShortcut(tr(Ctrl+D);quitAction-setShortcut(tr(Ctrl+Q);QMenu*fileMenu=menuBar()-addMenu(tr(操作菜单);fileMenu-addAction(addAction);fileMenu-addAction(deleteAction);fileMenu-addSeparator();fileMenu-addAction(quitAction);1主界面布局主界面布局(3)运行结果如图

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Qt-5开发及实例-第13章-Qt-5数据库课件.pptx
    链接地址:https://www.163wenku.com/p-5101742.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库