收藏 分享(赏)

qt基础(嵌入式用户图形界面编程).ppt

上传人:gsy285395 文档编号:5998195 上传时间:2019-03-23 格式:PPT 页数:64 大小:2.31MB
下载 相关 举报
qt基础(嵌入式用户图形界面编程).ppt_第1页
第1页 / 共64页
qt基础(嵌入式用户图形界面编程).ppt_第2页
第2页 / 共64页
qt基础(嵌入式用户图形界面编程).ppt_第3页
第3页 / 共64页
qt基础(嵌入式用户图形界面编程).ppt_第4页
第4页 / 共64页
qt基础(嵌入式用户图形界面编程).ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、嵌入式用户图形界面编程,嵌入式用户图形界面编程,课程目的了解嵌入式图形系统 掌握QT/E开发环境、关键技术 通过实例熟悉基于Qt/E的嵌入式GUI设计,1、嵌入式图形系统简介,1.1 Linux图形系统的发展史linux本身没有图形界面, linux现在的图形界面的实现只是linux下的应用程序实现的。,1、嵌入式图形系统简介,1.1 Linux图形系统的发展史 图形界面并不是linux 的一部分,linux只是一个基于命令行的操作系统。 linux和Xfree的关系就相当于当年的DOS和 windows3.0 一样,windows3.0 不是独立的操作系统,它只是 DOS的扩充,是DOS下的

2、应用程序级别的系统,不是独立的操作系统,同样XFree只是linux下的一个应用程序 而已,不是系统的一部分。,1、嵌入式图形系统简介,1.1 Linux图形系统的发展史但是X的存在可以方便用户使用电脑。WINDOWS95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面 windows就不成为windows了,但linux却不一样,没有图形界面linux还是 linux,很多装linux的 WEB服务器就根本不装X服务器。这也是WINDOWS和linux的重要区别之一。,1、嵌入式图形系统简介,1.1 Linux图形系统的发展史X Wind

3、ow:业界标准Open Look:来自SUN与AT&TMotif :来自IBM/HP的OSF CDE :UNIX的标准图形界面 QT : KDE 的开发基础GNOME :信仰的产物,1、嵌入式图形系统简介,1.2 嵌入式图形系统的发展史早期嵌入式系统功能简单,对图形用户界面需求并不是太大。而且当时的图形系统对硬件要求太高,在嵌入式上实现几乎没有可能。 后来,应市场需求产生一些高级GUI工具包,使得嵌入式linux下的图形开发成为可能,而且易于编写出更好、更漂亮的界面。,1、嵌入式图形系统简介,1.3 常用的几种嵌入式GUI工具包 紧缩的 X Window 系统 MicroWindows Min

4、iGUI OpenGUI Qt/ Embedded,1.3.1 TinyX,TinyX,是标准X-Windows在嵌入式系统的小巧实现,作为一个图形环境,X-Windows是成功的,但由于在体系接口上的原因,限制了它对游戏、多媒体的 支持能力。,1.3.2 Microwindows,Mirowindows是嵌入式系统中广为使用的一种图形用户接口,其官方网站是:http:/www.microwindows.org。这个项目的早期目标是在嵌入式Linux平台上提供和普通个人电脑上类似的图形用户界面。 MicroWindows,其主要特色在于提供了/体系结构,同时也提供了相对完善的图形功能。但却无任

5、何硬件加速能力,图形引擎中也存在着许多未经优化的低效算法。,1.3.3 MiniGUI,MiniGUI是由北京飞漫软件技术有限公司主持的一个自由软件项目(遵循GPL条款),其目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。 MiniGUI为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形。用户也可以利用MiniGUI建立菜单、按钮、列表框等常见的GUI元素。,1.3.4 OpenGUI,OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C+图形/窗口接口,它的资源消耗小,可移植

6、性差,不支持多进程。,1.3.5 主流的Linux窗口系统,2、QT/E,Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界面的工具包。Qt是挪威Trolltech软件公司的产品,它为各种系统提供图形用户界面的工具包,QtE就是Qt的嵌入式版本。,2、QT/E,注意:QT 与 QT/Embedded 的区别,2、QT/E,2、QT/E :QT类库架构,2.1 QT/E 特点,2.1.1 跨平台可支持的平台包括: MS/Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP; Unix/X11 Linux、Su

7、n Solaris、HP-UX、Compaq True64Unix、IBM AIX、SGI IRIX 和很多其它X11 平台; Macintoshi Mac OSX; 嵌入式的,包含有FramBuffer 的Linux 平台。,2.1 QT/E 特点,2.2.2 资源丰富 trolltech 的主页:http:/www. 支持匿名访问的FTP: ftp:/ 新闻组服务器: 非官方的Qt 文档中文翻译小组: http:/ QT/E 特点,2.2.3 工具丰富 提供了构建(qmake)、可视化设计(uic和qdesigner)、国际化(linguist)、文档系统(assistant)等一系列非

8、常好用的工具。,2.1 QT/E 特点,2.2.4 丰富的API函数 Qt/Embedded 也可以看成是一组用于访问嵌入式设备的 Qt C+ API; Qt/Embedded 的Qt/X11,Qt/Windows 和Qt/Mac版本提供的都是相同的API和工具。,2.1 QT/E 特点,2.2.5 运行需要资源少、功能强大 相对X窗口下的嵌入解决方案而言, Qt/Embedded只要求一个较小的存储空间(Flash)和内存。Qt/Embedded可以运行在不同的处理器上部署的Linux系统,只要这个系统有一个线性地址的缓冲帧并支持C的编译器。,2.1 QT/E 特点,2.2.6 功能可裁减

9、Qt/Embedded 提供了大约200个可配置的特征,3 QTOPIA,3.1 简介 Qtopia是基于 Qt编写的一个用于手持设备的 用户信息管理软件,它集成了很多实用的程序。 市面上买到的预装 linux操作系统的 arm9开发版,开机后看到的图形界面多是qtopia。,3 QTOPIA,3.1 简介,3 QTOPIA,3.2 QTE和Qtopia开发模型,课堂回顾,1,QT 与 QT/E 最大的不同? 2, QTOPIA与QT的关系? 3,众多嵌入式图形开发库中,为什么大多数人选择QT/E?,4 QTE开发环境搭建,宿主机移植所需工具及环境变量声明:,5 QTE开发关键技术,1. QT

10、对象模型元对象系统信号和插槽 2. QObject类对象树事件处理,元对象系统,是一个C+扩展,使得QT更适合真正的组件GUI编程使用元编译器moc产生能被标准C+编译器访问的附加C+代码带有moc预编译器的C+基本上提供了面向对象的灵活性,并保持了C+的执行效率和扩展性,信号和插槽,在Qt程序中,利用信号(signal)和插槽(slot)机制进行对象间的通信signal和slot机制真正实现了封装的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且signal和slot之间也不是一一对应的。,事件处理的方式也是回调当对象状态发生改变的时候,发出signal通知所有的sl

11、ot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signal,Signal和Slot的声明(1/2),在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义,Signal和Slot的声明(2/2),signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signal,Signal和Slot的连接(1/2),在signal和slot声明以后,需要使用connect()函数将它们连接起来。 connect()函数属于QObject类的成员函数,它能够连接signal和sl

12、ot,也可以用来连接signal和signal,函数原形如下:boolQObject:connect( const QObject* sender, const char * signal, const QObject* receiver, const char * member ) 其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件,Signal和Slot的连接(2/2),在使用connect()函数进行来接的时候,还需要用到SIGNAL( )和SLOT( )这两个宏,使用方法如下:,信号与插槽的连接方式,QObject类,QObject是Qt类体系的唯一基类,是Qt各

13、种功能的源头活水,就象MFC中的CObject和Dephi中的TObject 对象树:QObject在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject时,它就被添加到父对象的children()列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。 事件:事件是由窗口系统或qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的。,事件

14、运行机制,QApplication,QApplication和QWidget都是QObject类的子类 QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的,QWidget,QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上 QWidget类有很多成员函数,但一般不直接使用,

15、而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类,对象树,6 实例一,一、代码编辑 二、程序编译,#include #include int main(int argc, char * argv) QApplication a(argc, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMainWidget( ,#include #include int main(int argc, char * argv) QApplication a(argc

16、, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMainWidget( ,#include #include int main(int argc, char * argv) QApplication a(argc, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMainWidget( ,#include #include int main(int argc, char * argv)

17、 QApplication a(argc, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMainWidget( ,#include #include int main(int argc, char * argv) QApplication a(argc, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMainWidget( ,#include #include int main(in

18、t argc, char * argv) QApplication a(argc, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMainWidget( ,#include #include int main(int argc, char * argv) QApplication a(argc, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMainWidget( ,#include

19、#include int main(int argc, char * argv) QApplication a(argc, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMainWidget( ,#include #include int main(int argc, char * argv) QApplication a(argc, argv);QPushButton hellobtn(“Hello world!“, 0);hellobtn.resize(100, 20);a.setMa

20、inWidget( ,6 实例一,二、程序编译 1,生成工程文件 qmake -project 2,生成Makefile qmake 3, 编译 make,6 实例二,一、工程创建 二、界面设计 三、代码编辑 四、程序编译,6 实例三(信号与槽),一、工程创建 二、界面设计 三、代码编辑 四、程序编译,课堂回顾,1、怎样将信号连接到槽? 2、能否将多个槽连接到一个信号?,7 Qt Designer,直接使用代码来直接编写GUI无疑是非常痛苦的,好在QT提供了界面开发工具:QTdesignerQt应用程序除了使用手工编写代码的方式外,还可以用过Qt Desinger来完成Qt Designer的

21、功能十分强大,界面类似于VB,而且还提供了大量可供编程使用的组件,7 Qt Designer,基于Qt Designer程序设计,在使用Qt Designer程序开发时,一般要涉及到下面几个步骤:1.创建和初始化子部件 2.设置子部件布局 3.设置Tab键次序(不是必须) 4.建立信号与插槽的连接 5.编写事件处理函数,基于Qt Designer程序设计,基于Qt Designer程序设计,Qt Designer的工作过程,Qt Designer将工程文件组织成.ui的文件 由.ui文件生成.h文件 UIC -o form.h form.ui 需要注意的是,在QT3中使用例如UIC -o fo

22、rm.cpp-i form.hform.ui这样的方式来生成表单的CPP文件,但在QT4中,UIC已经作了修改,不能输出表单的CPP文件 由C+编译器编译所有.h和.cpp文件,QT编程模式,Qt 程序开发流程,1.使用designer 设计界面,添加窗口组件 建立信号槽连接 编写事件处理函数 保存工程为.ui文件,得到一个主窗口类2. 编写main.cpp文件进行主窗口类的实例化及显示 3.设置编译所需的环境变量 QTDIR =,Qt 程序开发流程,4.使用qmake生成.pro工程文件 rootIntelqt4qmake -project 5.通过qmake自动生成Makefile文件 rootIntelqt4qmake6. make生成可执行文件7.运行,

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

当前位置:首页 > 网络科技 > 开发文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报