新書推薦:
《
潜能觉醒
》
售價:NT$
395.0
《
初平:汉末群雄混战(190—195)
》
售價:NT$
245.0
《
建安:官渡大决战(196—200)
》
售價:NT$
245.0
《
中亚民族史
》
售價:NT$
840.0
《
人工智能与智能制造:概念与方法 [美]马苏德·索鲁什 [美]理查德·D.布拉茨
》
售價:NT$
640.0
《
中平:东汉王朝大崩溃(184—189)
》
售價:NT$
245.0
《
基于鲲鹏的分布式图分析算法实战
》
售價:NT$
495.0
《
中国历史研究入门(全二册)
》
售價:NT$
1290.0
|
內容簡介: |
本书以完成一个智能家居项目为主线,讲述了实训各个阶段所需要的知识。全书分为三篇,第一篇讲述了项目的界面部分,用Qt程序设计,并以一个小项目媒体播放器的制作来加深理解。第二篇讲述了项目的驱动程序部分,即基于ARM学习板及扩展电路板的驱动程序的编写。第三篇讲述了系统的集成,即嵌入式Qt界面控制硬件,完成一个简易的智能家居项目。
本书适合作为大专院校嵌入式专业、物联网专业学生的实训教材。此外,有志从事嵌入式Linux开发的人员可以把本书作为入门级读物。
|
目錄:
|
目 录
第一篇 Qt程序设计
第1章 Qt编程基础及开发环境的搭建1
1.1 Qt的起源1
1.2 Linux系统下的图形界面3
1.2.1 Linux本身包括内核和Shell3
1.2.2 关于X114
1.2.3 窗口管理器综合桌面环境5
1.3 Qt的特点及主要构成5
1.3.1 Qt的特点5
1.3.2 Qt开发环境的主要构成7
1.4 Qt开发环境的搭建8
1.4.1 安装Qt Creator8
1.4.2 安装虚拟机11
1.4.3 在虚拟机中安装Linux
操作系统15
1.5 使用Qt开发环境创建第一个
应用程序28
1.5.1 关于可视化编程28
1.5.2 Qt Creator常用菜单的
功能介绍28
1.5.3 举例29
第2章 Qt编程基础36
2.1 C++基础36
2.2 Qt程序编译过程分析43
2.2.1 Qt Creator中应用程序的
编译过程43
2.2.2 Qt的元对象系统48
2.2.3 Qt资源文件49
2.3 Qt控件编程52
2.3.1 Qt的帮助系统53
2.3.2 Qt Creator界面中的控件54
2.3.3 常用控件举例57
2.4 Qt布局管理60
2.5 信号与槽61
2.6 媒体播放器的制作62
2.6.1 制作界面62
2.6.2 编写控件的事件代码64
第3章 智能家居项目Qt界面设计75
3.1 界面跳转75
3.2 智能家居多级子项目界面设计81
3.2.1 智能家居项目需求分析81
3.2.2 代码实现82
第二篇 驱动程序开发
第4章 搭建开发环境93
4.1 软件开发环境的搭建93
4.1.1 安装VMware Workstation
软件93
4.1.2 建立虚拟电脑94
4.1.3 Ubuntu 12.04的安装102
4.1.4 Ubuntu 12.04系统的配置106
4.1.5 安装使用Source Insight113
4.1.6 交叉环境的搭建127
4.2 硬件环境介绍129
4.2.1 S3C2440芯片介绍129
4.2.2 S3C2440开发板主要硬件的
说明133
第5章 驱动程序开发的内核基础144
5.1 嵌入式Linux操作系统的移植
过程概述144
5.1.1 Linux操作系统及其特点144
5.1.2 嵌入式Linux操作系统的
特点144
5.1.3 嵌入式Linux系统的
移植步骤145
5.2 基于GEC2440开发板的内核移植146
5.2.1 Linux-2.6.30内核移植146
5.2.2 驱动模块的动态编译与
静态编译153
5.3 常见的嵌入式内核驱动编译与
移植161
5.3.1 LCD驱动移植161
5.3.2 触摸屏驱动移植166
5.3.3 USB驱动移植170
5.3.4 网卡驱动移植174
第6章 智能家居项目驱动程序实验177
6.1 房间灯驱动程序177
6.1.1 实验目的177
6.1.2 实验原理178
6.1.3 实验步骤178
6.2 窗帘模块驱动程序186
6.2.1 光敏电阻驱动程序186
6.2.2 步进电机的驱动程序194
6.3 温湿度控制模块驱动程序203
6.3.1 温湿度传感器DHT11
驱动程序203
6.3.2 直流电机驱动程序211
6.4 烟雾及红外检测模块驱动程序215
6.4.1 烟雾传感器MQ-2驱动
程序215
6.4.2 红外模块驱动程序222
6.4.3 蜂鸣器驱动程序228
第三篇 系统集成
第7章 Qt图形下载到学习板239
7.1 带QtE4的文件系统分析239
7.2 对QtE应用程序的编译240
第8章 智能家居项目集成241
8.1 把测试程序加入到Qt程序中241
8.1.1 灯光控制界面241
8.1.2 窗帘控制界面244
8.1.3 温湿度控制界面248
8.1.4 烟雾及红外检测界面253
8.2 驱动程序的统一加载257
附录 制作根文件系统258
参考文献263
|
內容試閱:
|
第2章 Qt编程基础
主要内容
C++基础
Qt程序编译过程分析
Qt的常用控件
Qt布局管理
信号与槽机制
媒体播放器的制作
Qt是一个完全的C++程序开发框架,包含数百个使用C++编写的类组成
的类库和跨平台国际化开发工具。基于控件的编程使得Qt编写界面比
MFCWindows下的基于C++应用程序框架更加方便。Qt API和开发工具
对所有支持平台都是一致的,从而可以进行独立于平台的程序开发和
配置,使得跨平台软件编程直观、简易和方便。
2.1 C++基础
Qt是在标准C++上的扩展,读者如果有标准C++的基础,则再学Qt将更
容易一些。
例2.1 建立一个Point类a.cpp,包含数据成员x、y,编写main进行
测试。
1使用g++进行编译。
2把这个Point类拆分为aa.h、aa.cpp、main.cpp,编写
makefile进行编译。
解:
编写的代码如下:
#include iostream
using namespace std;
class Point
{
public:
Pointfloat a=0, float b=0;
float getX;
float getY;
protected:
float x, y;
};
Point::Pointfloat a, float b {
x = a;
y = b;
}
float Point::getX {
return x;
}
float Point::getY {
return y;
}
int main {
Point point3.2, 4.5;
cout"point: "point.getX","point.getY""endl;
}
使用g++进行编译:g++ -o mm a.cpp,执行.mm,可以看到结果
point: 3.2,4.5。
我们把a.cpp拆分为3个文件aa.h、aa.cpp、main.cpp,分别如下。
aa.h:
#include iostream
class Point
{
public:
Pointfloat a=0, float b=0;
float getX;
float getY;
protected:
float x, y;
};
aa.cpp:
#include "aa.h"
Point::Pointfloat a, float b
{
x = a;
y = b;
}
float Point::getX
{
return x;
}
float Point::getY
{
return y;
}
main.cpp:
#include "aa.h"
using namespace std;
int main
{
Point point3.2,4.5;
cout"point: "point.getX","point.getY""endl;
}
再编写一个makefile,如下所示,执行make,也可以输出point: 3.2
,4.5。
aa.o:aa.cpp aa.h
g++ -c aa.cpp -o aa.o
main.o:main.cpp
g++ -c main.cpp -o main.o
mm:aa.o main.o
g++ -o mm aa.o main.o
例2.2 新建Circle类,继承自例2.1中的Point,进行如下操作。
1Circle类具有成员变量radius,能够计算面积,使用g++编译
。
2把Circle类拆分成3个文件,即circle.h、circle.cpp、
main.cpp,编写一个makefile,进行编译,达到同样的功能。
解:
1在Linux虚拟机中,使用gedit或vim编辑如下代码,命名为
mm.cpp。
#include iostream
using namespace std;
class Point
{
public:
Pointfloat a=0, float b=0;
float getX;
float getY;
protected:
float x, y;
};
Point::Pointfloat a, float b
{
x = a;
y = b;
}
float Point::getX
{
return x;
}
float Point::getY
{
return y;
}
class Circle : public Point
{
public:
explicit Circlefloat x=0, float y=0, float r=0;
void setRadiusfloat r;
float getRadius;
float area;
protected:
float radius;
};
Circle::Circlefloat a, float b, float r: Pointa,b,
radiusr
{
}
void Circle::setRadiusfloat r
{
radius = r;
}
float Circle::getRadius
{
return radius;
}
float Circle::area
{
return 3.14159*radius*radius;
}
int main
{
Point point3.2,4.5;
cout"point: "point.getX","point.getY""endl;
Circle *circle = new Circle2.4, 1.2, 5.6;
cout"Circle的面积area is: "circle-areaendl;
}
使用g++ -o mm mm.cpp,可以得到可执行性文件mm,执行.mm可以得
到结果:
g++ -o mm mm.cpp
.mm
point:3.2,4.5
Circle 的面积area is: 98.5203
这里,我们重点解释一下语句Circle::Circlefloat a, float b,
float r: Pointa,b, radiusr,这一行是Circle类的构造函数继
承了父类的构造函数,使用标识符“:”,有点像Java编程中的super
关键字,在执行子类的构造函数之前,必须先执行父类的构造函数。
在这一条语句中,子类构造函数参数a、b、r 分别传给了Pointa, b
和radiusr,对前者就是以a、b为参数,调用Point类的构造函数,
对后者就是把r的值赋给Circle类的成员变量radius。
2在例2.1中,已经将a.cpp拆分为aa.h、aa.cpp了,在本例中
,我们再把Circle类分割成circle.h、circle.cpp,分别如下:
#include "aa.h"
class Circle:public Point
{
public:
explicit Circlefloat x=0, float y=0, float r=0;
void setRadiusfloat r;
float getRadius;
float area;
protected:
float radius;
};
#include "circle.h"
Circle::Circlefloat a, float b, float r: Pointa,b,
radiusr
{
Pointa, b;
radius = r;
}
void Circle::setRadiusfloat r
{
radius = r;
}
float Circle::getRadius
{
return radius;
}
float Circle::area
{
return 3.14159*radius*radius;
}
再生成一个main.cpp,如下所示:
#include "circle.h"
#include "aa.h"
using namespace std;
int main
{
Point point3.2,4.5;
cout"point: "point.getX","point.getY""endl;
Circle *circle = new Circle2.4, 1.2, 5.6;
cout"Circle的面积area is: "circle-areaendl;
}
编写一个makefile,如下:
circle:aa.o circle.o main.o
g++ circle.o main.o aa.o -o circle
aa.o:aa.cpp aa.h
g++ -c aa.cpp -o aa.o
circle.o:circle.cpp circle.h
g++ -c circle.cpp -o circle.o
main.o:main.cpp circle.h
g++ -c main.cpp -o main.o
执行make,再执行.circle,可得上面一样的结果。
|
|