


单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第6章,嵌入式linux图形用户接口,第六章 嵌入式linux图形用户接口,本章主要讲述嵌入式,Linux,图形用户界面(,GUI,,,Graphic User Interface,)的有关内容,即嵌入式,GUI,本章首先简单介绍嵌入式,GUI,的相关内容;之后以,Qt,为例详细介绍其移植和编程操作;最后详细介绍基于,QTE,的,Qtopia,平台的移植和编程操作GUI,编程能够提高操作的人性化,优化产品性能,减轻用户认知负担,使程序更适合用户的操作需求主要内容,第一节,嵌入式,GUI,简介,第二节,嵌入式,GUI Qt,第三节,基于,Qt,技术的,Qtopia,内容:,随着嵌入式系统的广泛应用,PDA、机顶盒、DVD/VCD播放机及WAP手机等嵌入式设备已经迅速普及,这些设备同时应该拥有华丽美观、易于操作的图形用户界面因此,在嵌入式系统中,特别是在一些消费类产品中,也逐渐出现了图形用户界面(GUI),一、嵌入式GUI的特点,二、嵌入式GUI的种类,第一节 嵌入式GUI简介,嵌入式系统一般不会建立在庞大的操作系统以及GUI之上,比如Windows或X Window,它们对实时性的要求非常高,对GUI的要求也更高。
而且,嵌入式系统往往是一种定制设备,对GUI的需求各不相同,有些系统只要求一些图形功能,而有些系统则要求完备的GUI支持,因此,GUI也必须是可定制的由于受到当前嵌入式系统本身特点的影响,并受其发展限制,所以嵌入式系统中的GUI应该有如下特点:,占用的存储空间以及运行时占用资源少运行速度以及响应速度快可靠性高便于移植和定制第一节 嵌入式GUI简介 一、嵌入式GUI的特点,目前,常用的嵌入式GUI系统有QT/Embedded、MicroWindows、MiniGUI和OenGUI等下面对这几种常用的系统做一下简单介绍1.QT/Embedded,QT/Embedded是著名的QT库开发商TrollTech开发的基于FrameBuffer、面向嵌入式系统的QT版本它的主要特点是界面美观、色彩配比好,使用与QT/Windows和QT/X11完全一致的API接口,许多基于QT的程序可以非常方便地移植到嵌入式系统;同时它具有丰富的模块,用户可以根据需要选择QT/Embedded的特性集合QT/Embedded实现了对下层输入设备的驱动和底层图形接口以及各基类和API不过,QT/Embedded对于系统资源的要求非常高,运行时需要较大的存储空间和运行空间;而且它是基于C+实现的,而这种C+接口对于嵌入式系统中的某些应用来说显得比较臃肿。
第一节 嵌入式GUI简介,二、嵌入式GUI的种类,2.MicroWindows,Microwindows是由美国CenturySoftware公司开发的开放源码的嵌入式GUI项目它不需要其他图形系统的支持,可以充分利用Linux提供的Framebuffer机制来进行图形显示同时在底层提供了对多种芯片的支持,并基本上用C语言实现,因此移植性较强Microwindows支持两种API:ECMAAPIW(类Win32API)和Nano-XAPIs这些API对Win32和XWindow系统有很好的兼容性,使程序可以很容易地从其他系统上移植过来由于MicroWindows为了与XWindow的兼容,采用了传统的基于UNIXSocket的客户端/服务器结构此是,客户端的画图、窗口建立等操作都是通过套接字与服务器通信在这种情况下,系统就非常依赖于UNIXSocket,而UNIXSocket的传递需要通过内核,这在一些对实时性要求比较高的系统里就不太有利而且,Microwindows基本上是用C语言实现的,虽然增强了可移植性,但也导致了系统的运行效率不高第一节 嵌入式GUI简介,二、嵌入式GUI的种类,3.MiniGUI,MiniGUI是我国国内自主开发、比较成熟的一个图形用户界面系统,面向基于Linux的实时嵌入式系统,使用现有成熟的图形引擎(SV2GALib/LibGGI),采用类似WinCE的线程机制(目前MiniGUILite版本改用微客户端/服务器模式来提供对多进程的支持),集成了多字体和多字符集,支持硬件加速能力,充分利用显示内存。
MiniGUI利用线程之间的同步操作,实现了客户线程和服务线程之间的微客户端/服务器结构,因为它的客户和服务器是同一进程的两个不同线程它的核心实现主要体现在消息队列数据结构的使用上4.OpenGUI,OpenGUI在Linux系统上已经存在很长时间了这个库是用C+编写的,只提供C+接口OpenGUI基于一个用汇编语言实现的x86图形内核,提供了一个高层的C/C+图形接口OpenGUI提供了二维绘图函数原型、消息驱动的API及BMP文件格式支持OpenGUI功能强大,使用方便,支持鼠标和键盘事件,在Linux上基于FrameBuffer实现绘图由于OpenGUI基于汇编实现内核并利用MMX指令进行了优化,因此运行速度非常快,但是可移植性受到了影响第一节 嵌入式GUI简介,二、嵌入式GUI的种类,一、Qt与Qt/Embedded简介,二、Qt的特点,三、Qt的执行过程,四、Qt的插槽机制,五、一个完整的Qt程序,六、QtDesigner介绍,第二节 嵌入式GUI Qt,Qt是Trolltech公司的标志性产品,是一个跨平台的C+图形用户界面(GUI)工具包Qt的最大特点就是支持多平台处理,因为Qt对不同平台的专门API进行了封装。
Qt/Embedded是在嵌入式环境下所使用的Qt,具有Qt 在桌面系统的所有功能,是Trolltech公司为嵌入式设备上的图形用户界面和应用开发而定制的工具开发包,第二节 嵌入式GUI Qt,一、Qt与Qt/Embedded简介,面向对象,:Qt使用模块设计,并注重软件构件或元素的可重用性构件支持,:Qt提供信号(signal)和插槽(slot)概念,这是一种类型安全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt适合于真正的构件编程友好的联机帮助,:Qt提供了大量的联机参考文档,有超文本HTML方式,也有Linix帮助手册页和补充说明对于初学者,其中的指南将一步步地介绍如何进行Qt编程便利性,:Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题第二节 嵌入式GUI Qt,二、Qt的特点,用户自定义,:使用其他一些工具包时经常会遇到这样一种情况,没有真正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子而在Qt中生成用户自定义的组件非常简单,而且易于修改组件的行为。
国际化,:Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16位国际字符标准丰富的API函数:Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C+类,大多数类都是GUI专有的可用户化外观,:Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其他一些用户化外观主题之间切换完整的一套组件工具,:Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件,第二节 嵌入式GUI Qt,二、Qt的特点,10,Qt的执行过程如图6-2所示Qt应用程序初始化之后,在Qt库的支持下响应相应的处理事件并且返回第二节 嵌入式GUI Qt,三、Qt的执行过程,11,该实现过程需要Qt最主要的三个基类:QObject类、QApplication类和QWidget类QObject,QObject类是所有能够处理信号、插槽和事件的Qt对象的基类,能够创建带有父对象及其名字的对象,对象的父对象可以看作该对象的所有者QApplication,QApplication类负责GUI应用程序的控制流和主要设置。
它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置QWidget,QWidget类是所有用户接口对象的基类,它继承了QObject类的属性组件是用户界面的单元组成部分,它接收来自鼠标、键盘和其他窗口系统的事件,并且绘制到屏幕上QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能例如,QPushButton、QlistBox等都是它的子类第二节 嵌入式GUI Qt,三、Qt的执行过程,12,在Qt程序中,事件处理采用了信号(signal)和插槽(slot)机制信号和插槽机制的好处是不需要调用翻译表,节省资源利用信号和插槽进行对象间的通信是Qt最主要的特征之一当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也不知道要接收怎样的signalsignal和slot机制真正实现了封装的概念,但它们之间并不是一一对应的第二节 嵌入式GUI Qt,四、Qt的插槽机制,13,显然,由右图可知,同一个信号可以连接到多个插槽,多个信号也可以连接到同一个插槽之中。
随时可以建立一个连接,或者取消一个连接不过取消一个连接不是很常用,因为当一个对象被删除后,它所包含的连接都会被自动取消本节给出一个例子,首先产生一个Qapplication类的实例,然后定义窗口实例并把它作为程序的主窗口,最后调用show()和exec()方法,使自动界面作为主界面,程序进入消息循环代码如下:,#include,#include,int main(int argc,char*argv),QApplication app(argc,argv);,QLabel*hello=new QLabel(Hello Qt/Embedded!,0);,app.setMainWidget(hello);,hello-show();,return app.exec();,第二节 嵌入式GUI Qt,五、一个完整的Qt程序,14,Qt应用程序可以用Qt Desinger来编写Qt Designer的功能十分强大,并且提供了大量可供编程使用的组件,从而省略了许多重复性的工作,可以减少程序的开发周期,Qt Designer可以新建工程,并且在工程文件中自动生成关于窗体文件的.cpp、.h文件和main.cpp文件。
其中,.cpp文件和.h文件也可以通过uic工具生成之后可以通过progen命令生成main.pro,通过tmake工具生成makefile文件,再make即可得到相应的Qt应用程序第二节 嵌入式GUI Qt,六、QtDesigner介绍,15,一、Qtopia简介,二、Qtopia的功能,三、Qtopia编程,第三节 基于Qt技术的Qtopia,16,Qtopia是由Trolltech公司基于Qt/Embedded库,专门针对采用嵌入式Linux系统的消费电子设备所开发的一套应用程序包和开发库Qtopia平台是用于创建基于Linux设备的应用程序框架,并且包含丰富的用户应用程序Qtopia的设计利用了嵌入式Linux的高度优化、高内存效率的各种功能,为众多的多应用程序设备提供主要的通用功能Qtopia软件分为4个主要层次,第三节 基于Qt技术的Qtopia 一、Qtopia简介,17,Qtopia主要有以下功能:,可定制的用户界面,:Qtopia支持每像素24位,并且集成了可缩放矢量图形(SVG)增强的输入法,:多种键盘输入法广泛的国际化支持,:包括扩展的Unicodc支持,以及从右至左的文本模式。