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

上传人(卖家):晟晟文业 文档编号:5101742 上传时间:2023-02-11 格式:PPTX 页数:94 大小:2.04MB
下载 相关 举报
Qt-5开发及实例-第13章-Qt-5数据库课件.pptx_第1页
第1页 / 共94页
Qt-5开发及实例-第13章-Qt-5数据库课件.pptx_第2页
第2页 / 共94页
Qt-5开发及实例-第13章-Qt-5数据库课件.pptx_第3页
第3页 / 共94页
Qt-5开发及实例-第13章-Qt-5数据库课件.pptx_第4页
第4页 / 共94页
Qt-5开发及实例-第13章-Qt-5数据库课件.pptx_第5页
第5页 / 共94页
点击查看更多>>
资源描述

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)运行结果如图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Qt-5开发及实例-第13章-Qt-5数据库课件.pptx)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

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


163文库-Www.163Wenku.Com |网站地图|