智能家居系统项目三-实现智能家居软件系统的高级功能课件1.pptx

上传人(卖家):三亚风情 文档编号:3419868 上传时间:2022-08-29 格式:PPTX 页数:149 大小:4MB
下载 相关 举报
智能家居系统项目三-实现智能家居软件系统的高级功能课件1.pptx_第1页
第1页 / 共149页
智能家居系统项目三-实现智能家居软件系统的高级功能课件1.pptx_第2页
第2页 / 共149页
智能家居系统项目三-实现智能家居软件系统的高级功能课件1.pptx_第3页
第3页 / 共149页
智能家居系统项目三-实现智能家居软件系统的高级功能课件1.pptx_第4页
第4页 / 共149页
智能家居系统项目三-实现智能家居软件系统的高级功能课件1.pptx_第5页
第5页 / 共149页
点击查看更多>>
资源描述

1、项目三 实现智能家居软件系统的高级功能 智能家居系统开发智能家居系统开发配套配套PPTPPT01.实现窗口切换功能本任务是对多窗口实现切换的功能。单击左图窗口中的“En”按钮将页面切换至右图窗口,同时将原窗口关闭。Qt中的类类是一个抽象的概念,简单的说类就是种类、分类的意思。如:狗、猫等,是对一类事物的统称,并不是指的具体某个事物。在Qt中创建类的步骤如下:(1)右击项目,选择“添加新文件”。(2)可以选择创建“C+类”(不带图形界面)或者“Qt设计师界面类”(带图形界面)。(3)对类名和基类进行设置,注意类名首字母要大写。设置完成会自动生成以类名为文件名的头文件和源文件。在头文件中有对类的声

2、明,格式为“class 类名”。创建好类后意味着此类以后可以作为一种新的数据类型定义变量(需先引入该类)。练习创建一个项目,在项目中定义一个学生类(Student)。在Student类中定义四个属性:学号、姓名、年龄、性别。定义三个方法:学习、吃饭、唱歌。创建一个学生类Student(方法略)打开“student.h”头文件,在“public”区域定义Student类的四个属性,代码如下:int id;/学号QString name;/姓名(注意先引入QString类)int age;/年龄char sex;/性别在“public”再定义三个方法,返回值都为“QString”类型,代码如下:Q

3、String Study();/学习方法QString Eat();/吃饭方法QString Sing();/唱歌方法在“student.cpp”源文件中写方法。代码如下:QString Student:Study()return this-name+正在学习.;QString Student:Eat()return this-name+正在吃饭.;QString Student:Sing()return this-name+正在唱歌.;Qt中的对象对象即归属于某个类别的个体,是指的具体某个事物、东西。例如:某人家养的一只名叫“Tom”的猫,这就是一个对象。在Qt中创建对象的步骤如下:(1)通

4、常创建的对象和类不在同一源文件中,因此在创建对象时,需先引入该类或者该类所在的头文件。(2)创建对象分为声明和初始化两部分。声明对象与声明变量的语法一致,格式为“类名*变量名;”,初始化对象的过程也称为实例化,创建的对象也可以成为“实例”。初始化对象的语法为“变量名=new 类名();”,对象的声明和实例化也可以在一条语句中完成,语法为“类名*变量名=new 类名();”。同一个可以创建若干对象。练习创建一个“Student”对象,对象的属性为学号为“1”,姓名为“张三”,年龄为“16”,性别为“男”。在构造方法中实例化Student类,并完成对象的属性和方法的操作。代码如下:Student*

5、stu=new Student();stu-id=1;stu-name=张三;stu-age=16;stu-sex=男;ui-lblShow-setText(stu-Study();Qt中的构造方法。构造方法是在类的实例化的同时执行的方法,即是在“new 类名()”的时候进行调用的方法,一般使用构造方法来对类的属性进行初始化。构造方法的特征有:(1)构造方法不声明方法的返回值。(2)方法名和类名相同。(3)构造方法可以有系统自动创建,也可以由用户手动添加。(4)创建带有参数的构造方法,可以有效提高创建对象、初始化属性的开发效率。练习重写“Student”类中的构造方法,在构造方法中进行属性的初

6、始化,并在“dialog.cpp”中创建一个Student对象,对象的属性为学号为“2”,姓名为“李四”,年龄为“17”,性别为“男”。(1)打开“student.h”类头文件,在“public”区域重新声明构造方法。代码如下:Student(int id,QString name,int age,char sex);(2)打开“student.cpp”类源文件,写构造方法。代码如下:Student:Student(int id,QString name,int age,char sex)this-id=id;this-name=name;this-age=age;this-sex=sex;(

7、3)打开“dialog.cpp”源文件,实例化“Student”类,并执行“Eat”方法,将返回值显示在Label控件上,代码如下:Student*stu=new Student(2,李四,18,男);ui-lblShow-setText(stu-Study();小知识:类的三大特性1.继承性继承是一种利用已有的类,快速创建新类的机制,这里被继承的类称为父类(基类),得到继承的类称为子类。通过继承,子类将拥有父类的全部属性和方法。在Qt中,类的声明时使用如下语法实现继承:“class 类名:public 父类名”。2.封装性类的封装是指使用访问权限控制符对内部成员(属性和方法)进行一定的保护。

8、封装的目的是增强安全性和简化编程。访问权限修饰符有“private”(私有权限)、“protected”(保护权限)、“public”(共有权限)三种修饰符修饰符当前类当前类子类子类其他类其他类private允许不允许不允许protected允许允许不允许public允许允许允许3.多态性多态指某个对象在编译期和运行期是不同的数据形态。多态通常表现为:使用父类的数据类型进行声明,但却创建子类的对象,这种方式也称为向上转型。向上转型后,该对象不可再访问父类中没有声明的属性和方法,如果父类和子类同时写了一个方法,则会调用子类的方法。其语法格式为:“父类类名 对象名=new 子类类名()”,如项目中

9、“Dialog”类是“QDialog”的子类,可以使用“QDialog*dialog=new Dialog()”进行类的实例化。1.打开项目“SmartHome”。右击该项目,选择“添加新文件”。创建一个“Qt设计师界面类”,类名为“Dialog2”。2.打开“dialog2.ui”界面文件,设置如图3-10的界面效果。图3-10 界面效果其控件属性设置见表3-2。表3-2 控件的属性设置控件类型控件名属性设置Dialog2(默认)宽度:800,高度:480LabellblBgX:0,Y:0宽度:800,高度:480Push ButtonbtnEnX:740,Y:420宽度:60,高度:603

10、.设置“lblBg”控件的背景和“btnEn”控件的边框背景,如图3-11、3-12所示。图.3-12“btnEn”控件边框背景图片图3-11“lbl”控件背景图片4.右击“btnEn”控件选择“转到槽”,进入“dialog2.cpp”源文件。5由于要将该页面转入“Dialog”页面,因此先要引入“dialog.h”头文件。在顶部输入“#include dialog.h”。6.在“btnEn”的“clicked()”槽方法中输入以下代码:void Dialog2:on_btnEn_clicked()QDialog*dialog=new Dialog();/实例化Dialog对象 dialog-

11、show();/显示Dialog页面 this-close();/关闭当前页面7.进入“main.cpp”主文件(程序的入口文件),将“Dialog2”页作为第一页进行显示。先引入“dialog2.h”头文件,在顶部输入“#include dialog2.h”,将程序中原来的“Dialog w;”修改为“Dialog2 w;”。这样在程序启动的时候就会将“Dialog2”作为第一页进行显示了。8.设计完成,运行测试。02.实现进度条加载功能本任务主要实现在程序中常见的进度条加载的功能。当用户单击“En”按钮时,进度条从0加载到100,进度条每次加1,并且在进度条值为10,20100时用一个la

12、bel显示文字信息,并将字体设为红色。多分支结构多分支结构通过“switchcase”语句来实现,其语法为:switch(变量)case 值1:语句块;break;case 值2:语句块;break;case 值n:语句块;break;default:语句块;break;与“ifelse”语句不同的是“if”语句的条件是通过关系表达式进行判断,而“switchcase”通过变量与值得比较进行判断,因此,“switchcase”语句只适用于“等于”的情况,而且这里的变量数据类型必须为int型,若出现大于、小于的判断或者为非int型的变量的判断,还必须使用“if”语句进行解决。练习命令解析器。有如

13、下功能供用户选择:1.显示全部记录,2.查询登录记录,3.退出。当用户在控制台输入1,用户选择的功能为显示全部记录;输入2,用户选择的功能为查询登录记录;输入0,用户选择的功能为退出。void Dialog:on_btnQd_clicked()int gn=ui-leGn-text().toInt();switch(gn)case 1:ui-lblShow-setText(显示全部记录);break;case 2:ui-lblShow-setText(查询登录记录);break;case 0:this-close();default:ui-lblShow-setText(没有该选项);brea

14、k;“for”循环语句 其语法为:for(表达式1;表达式2;表达式3)语句块;其中表达式1为循环控制变量初始值,表达式2为循环控制条件,表达式3为循环一次后循环控制变量的递增值。用户输入一个值,点击累加按钮,将计算从1累加到这个值的和,将其显示在Label控件中。void Dialog:on_btnLj_clicked()int val=ui-le_Val-text().toInt();int sum=0;for(int i=1;ilblShow-setText(QString:number(sum);练习 在Label控件中显示一组5行10列的“*”号。Dialog:Dialog(QWid

15、get*parent):QDialog(parent),ui(new Ui:Dialog)ui-setupUi(this);QString str=;for(int i=0;i5;i+)for(int j=0;jlblShow-setText(str);在Label控件中显示一组10行由“*”构成的正三角形。Dialog:Dialog(QWidget*parent):QDialog(parent),ui(new Ui:Dialog)ui-setupUi(this);QString str=;for(int i=0;i5;i+)for(int j=0;jlblShow-setText(str);

16、“while”循环语句其语法为:while(bool表达式)语句块;当bool表达式为true时,执行语句块;否则退出循环。练习 使用While循环语句改写For循环语句void Dialog:on_btnLj_clicked()int val=ui-le_Val-text().toInt();int sum=0;int i=1;while(ilblShow-setText(QString:number(sum);“dowhile”循环语句其语法为:do语句块;while(bool表达式);与“for”和“while”循环语句不同的是“dowhile”循环语句是先执行语句块,后判断bool表达

17、式,若值为true则继续循环,否则退出循环。练习 使用doWhile循环语句改写For循环语句void Dialog:on_btnLj_clicked()int val=ui-le_Val-text().toInt();int sum=0;int i=1;do sum+=i;i+;while(ilblShow-setText(QString:number(sum);1.打开项目“SmartHome”,进入“dialog2.cpp”源文件。2.对“btnEn”的“clicked”槽方法进行修改。代码如下:void Dialog2:on_btnEn_clicked()for(int i=0;ipr

18、ogressBar-setValue(i);switch(i)case 10:/当进度为10时 ui-lblShow-setText(正在加载串口配置.);break;case 20:/当进度为20时 ui-lblShow-setText(串口配置加载完成.);break;case 30:/当进度为30时 ui-lblShow-setText(正在加载界面配置.);break;case 50:/当进度为50时 ui-lblShow-setText(界面配置加载完成.);break;case 60:/当进度为60时 ui-lblShow-setText(正在初始化界面.);break;case

19、80:/当进度为80时 ui-lblShow-setText(界面初始化完成.);break;case 100:/当进度为100时 ui-lblShow-setText(进入系统中.);break;sleep(1);/系统休眠1秒 QDialog*dialog=new Dialog();/实例化Dialog对象 dialog-show();/显示Dialog页面 this-close();/关闭当前页面3.设计完成,运行测试。03.实现用户注册和登录功能1.用户注册功能界面初始状态不显示注册区域,点击注册按钮显示注册区域。要求新用户需要注册才能登入,注册数据保存到数据库“db.db”的“Log

20、in”表中。2.用户登录功能要求在登录界面输入密码时,密码显示为“*”;用户输入账号密码,单击登录按钮若输入正确则进入“dialog2.ui”界面;若账号、密码输入错误则弹出一个提示框如图3-20所示;单击“退出”按钮则关闭系统。数据库的概念数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。实际开发中使用的数据库几乎都是关系型的。关系数据库是按照二维表(Table)结构方式组织的数据集合,二维表由行和列组成,表的行称为元组,列称为属性,对表的操作成为关系运算,主要的关系运算有投影、选择、连接等。数据库系统通常分为桌面型和网络型两类。桌面型数据库系统是

21、指只在本机运行、不与其他计算机交换数据的系统,常用于小型信息管理系统,这类数据库系统常见的有Visual Foxpro、Access等。网络型数据库系统是指能够通过计算机网络进行数据共享和交换的系统,常用于构建较复杂的C/S(客户端/服务器端)结构或B/S(浏览器端/服务器端)结构的分布式应用系统,这类数据库系统常见的有Oracle、Microsoft SQL Server等。本教材使用Qt提供的一种进程内数据库SQLite,它小巧灵活,无须额外的安装和配置,是一种轻量级的数据库。结构化查询语言SQL结构化查询语言(Structured Query Language,简称SQL)是用于关系数据

22、库操作的标准语言,最早由Boyce和Chambedin在1974年提出,1976年SQL开始应用与商品化关系数据库管理系统,1982年美国国家标准化组织(ANSI)确认SQL为数据库系统的工业标准,1986年ANSI公布了SQL的第一个标准X3.135-1986。随后,国际标准化组织ISO也通过了这个标准,即SQL-86。1989年ANSI和ISO公布了经过增补和修改的SQL-89,在1992年推出的SQL-2对语言表达式做了较大扩充,1999年推出的SQL-3对新增对面向对象的支持。目前,许多关系型数据库供应商都在自己的数据库中支持SQL语言。(1)数据定义语言(Data Descripti

23、on Language,DDL),用于执行数据库定义的任务,对数据库及数据库中的各种对象进行创建、删除和修改等操作。数据库对象主要包括表、默认约束、规则、师徒、触发器和存储过程等。(2)数据库操纵语言(Data Manipulation Language,DML),用于操纵数据库中各种对象,检索和修改数据。(3)数据控制语言(Data Control Language,DCL),用于安全管理,确定哪些用户可以查看或者修改数据库中的数据。SQL语言大约由40条语句组成。每条语句通常由一个描述要产生的动作谓词关键字开始,如:“Create”、“Select”、“Update”等,后面是一个获多个子

24、句,子句进一步指明对数据的作用条件、范围、方式等。SQL语言由以下三部分组成:表每个数据库文件可以包含多个表,表是关系数据库中最主要的数据库对象,它是用来存储和操作数据的一种逻辑结构。表有行和列组成,因此也称为二维表。学号学号姓名姓名年龄年龄专业专业出生年月出生年月2016001张峰17计算机1999/10/082016002王磊17机电1999/09/102016003李林16计算机2000/05/092015001周凡18会计1998/11/202015002刘艺17机电1999/01/13表中元素的定义。(1)记录(Record),数据表中的一行数据被称为一个记录。表也可以成为记录的集合

25、。如表中共有四条记录。(2)字段(Filed),表中的每列就是一个字段,也叫属性。如表中包括“学号”、“姓名”、“专业”、“出生年月”、“入学时间”五个字段。字段包括字段名、字段数据类型、字段长度和是否为关键字等属性。其中,字段名是该字段的标识;字段存储数据的类型,如整形、文本型、时间日期型等;字段长度为该字段存储数据的最大长度。(3)关键字(Primary Key),指表中能唯一标识一条记录的字段或者字段组合,也称为主键。每一个数据表有且仅有一个关键字。SQLite的常用操作(1)创建数据库,语法为“sqlite3/存储路径/数据库名”。实例1:在桌面上创建一个名为“db.db”的数据库,代

26、码如下:sqlite3/home/zdd/桌面/db.db注意:由于当前SQLite的版本为SQLite3,因此你使用sqlite3的指令,而“.db”是SQLite数据库文件的扩展名。输入完成后,进入SQL命令提示符界面。但并没有在桌面上创建“db.db”的数据库文件。只有在数据库中建表后才能进行数据库文件的创建。(2)创建数据表,语法为“create table 表名(字段名1 字段描述,字段名2,字段描述)”。实例2:创建一个表名为“student”的表,其字段的属性见表字段名字段名字段类型字段类型字段长度字段长度是否主键是否主键id(学号)(学号)varchar20是name(姓名)(

27、姓名)varchar20否age(年龄)(年龄)int(默认)否professional(专业)(专业)varchar20否birthday(出生日期)(出生日期)date(默认)否在“SQL命令提示符”界面输入如下代码:create table student(id varchar(20)primary key,name varchar(20),age int,professional varchar(20),birthday date);注意:varchar是一种短字符的数据类型,最大可支持255个字符,若字符数超过255,需使用char型数据类型,每输入一条SQL指令需要使用分号作为结束

28、符,否则无法结束该指令。在表创建完成后可使用.table指令查看该表是否创建成功(3)向表中插入记录,语法为“insert into 表名(字段名1,字段名2,)values(数据1,数据2,);”,当插入的记录为所有字段时,语法可简化为“insert into 表名 values(数据1,数据2,);”。实例3:完成表的数据输入。在“SQL命令提示符”界面输入如下代码:insert into student values(2016001,张峰,17,计算机,1999-10-08);insert into student values(2016002,王磊,17,机电,1999-09-10);

29、insert into student values(2016003,李林,16,计算机,2000-05-09);insert into student values(2015001,周凡,18,会计,1998-11-20);insert into student values(2015002,刘艺,17,机电,1999-01-13);注意:插入的数据顺序一定要与字段顺序一一对应。对于字符型和时间日期型的字段,其值应使用单引号进行标注。(4)简单查询表的记录,语法为“select 字段1,字段2 from 表名 where 条件”。实例4:查询“student”表中的所有记录。在“SQL命令提

30、示符”界面输入如下代码:select*from student;注意:当要查询记录的所有字段信息时,字段项部分可以简化为“*”号。Qt操作SQLite数据库Qt提供的Qtsql模块实现了对数据库的访问,同时提供了一套与平台和具体所用数数据库均无关的调用接口。此模块为不同层次的用户提供了不同丰富的数据库操作类。例如对于习惯使用SQL语法的用户,QSqlQuery类提供了直接执行任意SQL语词并处理返回结果的方法;而对于习惯使用较高层数据库接口避免使用SQL语词的用户,QSqlTable Model和QSq1Relationa1TableModel类则提供了合适的抽象。操作步骤(1)创建项目“SQ

31、LiteTest”。(2)在项目文件“SQLiteTest.pro”中添加如下代码:QT+=sql(3)在“main.cpp”主文件中设置中文编码方式,代码略。(4)打开“dialog.cpp”源文件,引入库文件,代码如下:#include QSqlDatabase#include QDebug(5)在构造方法中,进行数据库的连接,代码如下:QSqlDatabase db=QSqlDatabase:addDatabase(QSQLITE);/添加数据库类型为SQLITE db.setDatabaseName(db.db);/设置数据库名为db.db if(db.open()qDebug()数据

32、库打开成功;else qDebug()wdReg-setVisible(false);/设置注册页面不可见QSqlDatabase db=QSqlDatabase:addDatabase(QSQLITE);/设置数据库类型为SQLITEdb.setDatabaseName(db.db);/设置数据库名db.open();/打开数据库QSqlQuery query;QString sql=create table if not exists Login(id integer primary key autoincrement,user varchar(20),passwd varchar(20)

33、,regDT datetime);query.exec(sql);/若表不存在则创建Login表6.进入“dialog3.ui”界面文件,右击“btnReg”按钮,选择“转到槽”。在槽方法中加入如下代码:void Dialog3:on_btnReg_clicked()ui-wdReg-setVisible(true);/设置注册页面可见7.进入“dialog3.ui”界面文件,右击“btnInsert”按钮,选择“转到槽”。在槽方法中加入如下代码:void Dialog3:on_btnInsert_clicked()if(ui-le_RUsername-text().isEmpty()|ui-

34、le_RPwd-text().isEmpty()|ui-le_RPwd_2-text().isEmpty()/若输入的信息不完整 QMessageBox:warning(NULL,注册失败,请完善注册信息);return;if(ui-le_RPwd-text().trimmed()!=ui-le_RPwd_2-text().trimmed()/若两次密码不一致 QMessageBox:warning(NULL,注册失败,验证密码不一致);return;QSqlQuery query;QString sql=select count(*)from Login where user=+ui-le_

35、RUsername-text()+;query.exec(sql);/查询账户数量 query.next();if(query.value(0).toInt()!=0)/若数量不为0 QMessageBox:warning(NULL,注册失败,用户已存在);return;sql=insert into Login values(null,+ui-le_RUsername-text()+,+ui-le_RPwd-text()+,+QDateTime:currentDateTime().toString(yyyy-MM-dd HH:mm:ss)+);if(query.exec(sql)QMessa

36、geBox:information(NULL,注册成功,用户注册成功);8.进入“dialog3.ui”界面文件,右击“btnClose”按钮,选择“转到槽”。在槽方法中加入如下代码:void Dialog3:on_btnClose_clicked()ui-wdReg-setVisible(false);/隐藏注册页面9.进入“dialog3.ui”界面文件,右击“btnExit”按钮,选择“转到槽”。在槽方法中加入如下代码:void Dialog3:on_btnExit_clicked()this-close();/关闭系统10.进入“dialog3.ui”界面文件,右击“btnLogin”

37、按钮,选择“转到槽”。在槽方法中加入如下代码:void Dialog3:on_btnLogin_clicked()if(ui-le_Username-text().isEmpty()|ui-le_Pwd-text().isEmpty()/若登录信息不完整 QMessageBox:warning(NULL,登录失败,请完善登录信息);return;QSqlQuery query;QString sql=select count(*)from Login where user=+ui-le_Username-text()+and passwd=+ui-le_Pwd-text()+;query.ex

38、ec(sql);/查询输入账户和密码的用户数量 query.next();if(query.value(0).toInt()=0)/若数量为0 QMessageBox:warning(NULL,登录失败,密码或用户名错误);return;QDialog*dialog2=new Dialog2();/进入Dialog2页面 dialog2-show();this-close();11.修改“main.cpp”主文件,设置启动默认页面为Dialog3。首先引入头文件“#include dialog3.h”,再将程序中原来的“Dialog w;”修改为“Dialog2 w;”。12.设计完成,运行测

39、试。04.实现用户列表功能本任务进行用户列表功能的实现。单击界面的“用户列表”按钮,显示用户列表,列表具体要求为:表头显示“账号”、“密码”、“注册时间”;当查询的记录数超过三条时,进行分页显示,点击“上一页”和“下一页”按钮,可以翻页。点击“关闭”按钮隐藏该区域。点击“导出文件”按钮,将用户列表的数据以“user.doc”的文件导出。select语句的高级应用select语句的标准语法为:select 字段列表 from 表名 where 条件group by 分组字段 order by 排序字段limit 起始记录号,显示记录数。实例1:显示“student”表中的记录数。代码:“sele

40、ct count(*)from student;”,运行结果:5。实例2:显示“student”表中最大的学生年龄。代码:“select max(age)from student;”,运行结果:18。实例3:显示“student”表中不是计算机专业的学生信息。代码:“select*from student where professional计算机;”实例4:显示“student”表中出生年份在1999年的学生信息。代码:“select*from student where birthday between 1999-01-01 and 1999-12-31;”实例5:显示“student”表

41、中机电和会计专业的学生信息。代码:“select*from student where professional=机电 or professional=会计;”实例6:显示“student”表中姓李的学生信息。代码:“select*from student where name like 李%;”实例7:显示“student”表中各专业的学生数。代码:“select professional,count(*)from student group by professional;”实例8:将“student”表按学生出生日期的降序进行排序。代码:“select*from student orde

42、r by birthday desc;”实例9:显示“student”表的第二到第四条记录。代码:“select*from student limit 1,3;”“Table View”控件显示列表在Qt中,通常使用“Item Views”控件组中的“Table View”控件进行Sqlite数据列表的显示。在“Table View”控件上,通过加载“QStandardItemModel”(基本元素模型)的方式,进行数据的显示。因此,在进行数据显示前,先要声明和实例化一个“QStandardItemModel”对象,方法为:“QStandardItemModel *model=new QSta

43、ndardItemModel();”。常用的QStandardItemModel类的方法有:(1)void setColumnCount(int),设置显示列数。如:“model-setColumnCount(5);”,表示设置显示5列数据。(2)void setHeaderData(int section,Qt:Orientation orientation,const QVariant&value),设置表头数据。“section”为设置第几位元素,“orientation”为设置位置,一般为“Qt:Horizontal”(表头设置在行)。“value”表示显示的表头数据。如:“model

44、-setHeaderData(0,Qt:Horizontal,学号);”表示设置第一列表头为“学号”。(3)void setItem(int row,int column,QStandardItem*item),设置显示内容。“row”表示行号,“column”表示列号,“item”表示要显示的元素。如:“model-setItem(0,0,new QStandardItem(“2016001”);”表示设置第0行第0列的数据为2016001。(4)bool removeRows(int row,int count),移除多行数据。“row”表示移除开始的行号,“count”表示移除行的数量,

45、如“model-removeRows(0,model-rowCount();”表示从第0行开始开始,数量为model的行数,即移除所有行。2.按图3-25所示修改用户登录登录界面,控件属性设置见表3-13。控件类型控件名属性设置Push ButtonbtnListtext:用户列表WidgetwdListX:515,Y:10宽度:280,高度:180Table View(wdList容器内)tvList Push Button(wdList容器内)btnPrePagetext:上一页Push Button(wdList容器内)btnNextPagetext:下一页Push Button(wdL

46、ist容器内)btnClose_1text:关闭Push Button(wdList容器内)btnExporttext:导出表3-13 控件的属性设置1.打开项目“SmartHome”,进入“dialog.ui”界面文件。3.“用户列表”按钮功能的实现(1)在“dialog3.h”头文件中引入“QStandardItemModel”头文件,并在“public”区域声明一个该对象的引用变量,代码如下:QStandardItemModel*model;(2)打开“dialog3.cpp”源文件,设置两个分页相关的全局变量,代码如下:int userCount=0;/用户数量int currentP

47、age=0;/当前页号(3)接任务三的构造方法,加入如下代码:sql=select count(*)from Login;query.exec(sql);query.next();userCount=query.value(0).toInt();ui-wdList-setVisible(false);/设置列表页面不可见model=new QStandardItemModel();model-setColumnCount(3);model-setHeaderData(0,Qt:Horizontal,帐号);model-setHeaderData(1,Qt:Horizontal,密码);mode

48、l-setHeaderData(2,Qt:Horizontal,注册时间);ui-tvList-setModel(model);初始化“tvList”控件(4)打开“dialog3.ui”界面文件,右击“btnList”按钮选择“转到槽”,在槽方法中加入如下代码:void Dialog3:on_btnList_clicked()ui-wdList-setVisible(true);currentPage=0;if(userCount3)ui-btnNextPage-setEnabled(true);QSqlQuery query;QString sql=select*from Login li

49、mit 0,3;query.exec(sql);int row=0;while(query.next()model-setItem(row,0,new QStandardItem(query.value(1).toString();model-setItem(row,1,new QStandardItem(query.value(2).toString();model-setItem(row,2,new QStandardItem(query.value(3).toString();row+;4.“上一页”按钮功能的实现。右击“btnPrePage”按钮选择“转到槽”,在槽方法中加入如下代码:

50、void Dialog3:on_btnPrePage_clicked()currentPage-;model-removeRows(0,model-rowCount();/移除所有行 ui-btnNextPage-setEnabled(true);if(currentPage=0)ui-btnPrePage-setEnabled(false);QSqlQuery query;QString sql=QString(select*from Login limit%1,3).arg(currentPage*3);query.exec(sql);int row=0;while(query.next(

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

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

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


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

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


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