资源预览内容
第1页 / 共93页
第2页 / 共93页
第3页 / 共93页
第4页 / 共93页
第5页 / 共93页
第6页 / 共93页
第7页 / 共93页
第8页 / 共93页
第9页 / 共93页
第10页 / 共93页
亲,该文档总共93页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第6章 Qt图形编程,XXXX出版社 2011,嵌入式Linux系统开发与应用,第6章 Qt图形编程,本章将进入到Linux的内核空间,初步介绍嵌入式Linux图形用户界面的有关内容。在介绍嵌入式GUI相关内容的基础上,介绍Qt的移植和编程操作,最后介绍节余Qt技术的Qtopia平台的移植与开发。嵌入式GUI具有轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点,嵌入式GUI程序更适合用户的操作需求。,6.1 嵌入式GUI简介,目前的桌面机操作系统大多有着美观、操作方便、功能齐全的GUI(图形用户界面)的特点,例如KDE或者GNOME。GUI(图形用户界面)是指计算机与其使用者之间的对话接口,可以说,GUI是当今计算机技术的重大成就。它的存在为使用者提供了友好便利的界面,并大大地方便了非专业用户的使用,使得人们从繁琐的命令中解脱出来,可以通过窗口、菜单方便地进行操作。 而在嵌入式系统中,GUI的地位也越来越重要,但是不同于桌面机系统,嵌入式GUI要求简单、直观、可靠、占用资源小且反应快速,以适应系统硬件资源有限的条件。另外,由于嵌入式系统硬件本身的特殊性,嵌入式GUI应具备高度可移植性与可裁减性,以适应不同的硬件条件和使用需求。,6.1 嵌入式GUI简介,总体来讲,嵌入式GUI具备以下特点: 体积小; 运行时耗用系统资源小; 上层接口与硬件无关,高度可移植; 高可靠性; 在某些应用场合应具备实时性。,6.1 嵌入式GUI简介,LINUX环境下的图形视窗标准为X Window System,Linux是类LINUX系统,所以顶层运行的GUI系统是兼容X标准的XFree86系统。X标准大致可以划分X Server、Graphic Library(底层绘图函数库)、Toolkits、Window Manager等几大部分。其好处是具有可扩展性、可移植性等优点,但对于嵌入式系统而言无疑太过庞大、累赘、低效。目前流行的嵌入式GUI与X思路不同,这些GUI一般不局限于X标准,更强调系统的空间和效率。,6.1.1 Qt/Embedded,6.1.2 MiniGUI,MiniGUI分为最底层的GAL层和IAL层,向上为基于标准POSIX接口中pthread库的Mini-thread架构和基于Server/Client的Mini-Lite架构。其中前者受限于thread模式对于整个系统的可靠性影响进程中某个thread的意外错误可能导致整个进程的崩溃,该架构应用于系统功能较为单一的场合。Mini-Lite应用于多进程的应用场合,采用多进程运行方式设计的Server/Client架构能够较好地解决各个进程之间的窗口管理、Z序剪切等问题。 MiniGUI还有一种从Mini-Lite衍生出的standalone运行模式。与Lite架构不同的是,standalone模式一次只能以窗口最大化的方式显示一个窗口。这在显示屏尺寸较小的应用场合具有一定的应用意义。MiniGUI的IAL层技术SVGA lib、LibGGI、基于framebuffer的native图形引擎以及哑图形引擎等,对于Trolltech公司的QVFB在X Window下也有较好的支持。IAL层则支持Linux标准控制台下的GPM鼠标服务、触摸屏、标准键盘等。 MiniGUI下丰富的控件资源也是MiniGUI的特点之一。当前MiniGUI的最新版本是1.3.3。在该版本的控件中已经添加了窗口皮肤、工具条等桌面GUI中的高级控件支持。对比其他系统,“Mini”是MiniGUI的特色,轻量、高性能和高效率的MiniGUI已经应用在电视机顶盒、实时控制系统、掌上电脑等诸多场合。,6.1.3 Microwindows,Microwindows Open Source Project成立的宗旨在于针对体积小的装置,建立一套先进的视窗环境,在Linux桌面上通过交叉编译可以很容易地制作出Microwindows的程序。 MicroWindows是一个较早出现的开发源码的嵌入式GUI软件,目前由Century软件公司维护。它的主要特色在于提供了比较完善的图形功能,支持多种外部设备输入,包括液晶显示器、鼠标和键盘等。在嵌入式Linux平台上,从Linux 2.2.x的内核开始,为了方便图形的显示,使用了Framebuffer技术。 MicroWindows可以与行在支持32位Framebuffer的linux系统上,支持每个像素的1位、2位、4位、8位、16位、24位和32位的彩色空间/灰度,还实现了VGA16平面模式的支持,能通过调色板技术将RGB格式的颜色空间转换成目标机器上最相近的颜色,然后显示出来。,6.1.3 Microwindows,MicroWindows的核心基于显示设备接口,绝大多数是用C语言开发的,移植性很强。目前已经移植到包括ARM在内的多种平台上。MicroWindwos有自己的Framebuffer,因此它并不局限于Linux开发平台,在eCos、FreeBSD、RTEMS等操作系统上都能很好地运行。此外,MicroWindows能在宿主机上仿真目标机,这意味着开发和调试MicroWindows应用程序可以在普通的个人电脑上进行,而不需要使用“宿主机目标机”调试模式。 MicroWindows起源于NanoGUI项目,它提供类Win32/WinCE API和类XLIB API的Nano-X两种接口,Win32/WinCE API的版本包含了一组和微软的WIN32图形用户接口相似的API,这个版本就是MicroWindows版本;类XLIB API的Nano-X版本是基于X-Windows的一组Xlib风格的API函数库,这个版本甚至允许X11的二进制代码直接在MicroWindwos的Nan-X服务器上运行。,6.1.3 Microwindows,Microwindows能够在没有任何操作系统或其他图形系统的支持下运行,它能对裸显示设备进行直接操作。这样Microwindows就显得十分小巧,便于移植到各种硬件和软件系统上。然而Microwindows的免费版本进展一直很慢,几乎处于停顿状态,而且至今为止,国内没有任何一家对Microwindows提供全面技术支持、服务和担保的专业公司。,6.1.4 OpenGUI,OpenGUI基于一个用汇编语言实现的x86图形内核,提供了一个高层的C/C+图形接口。它和MiniGUI样,也是使用LGPL许可证。OpenGUI提供了二维绘图原语,消息驱动的API,BMP文件格式支持。它功能强大,使用方便。我们甚至可以实现Borland BGI风格的应用程序,或者是QT风格的窗口。OpenGUl支持鼠标和键盘的事件,在Linux上基于Framebuffer或者SVGALib实现绘图。颜色模型方面,OpenGUI已经支持8,15,16和32位模型。1,2,4位像素的支持在Microwindows,Libggi,Allegro等系统上虽然已经实现,但是bug也比较多,因此这些模式使用得很少。 由于基于汇编实现的内核并利用MMX指令进行了优化,OpenGUI的运行速度非常快,它支持32位的处理器,能够在MSDOS、QNX和Linux下运行,主要用于在这些系统中开发图形应用程序和游戏。当然,也可以看出来,由于其内核用汇编实现,可移植性受到了影响。通常在驱动程序一级性能和可移植性是矛盾的,我们必须找到一个折衷。,6.1.5 常见GUI的参数比较,6.2 Qt/Embedded开发基础,6.2.1 Qt/Embedded介绍 1架构 Qt/Embedded以原始Qt为基础,并做了许多出色的调整以适用于嵌入式环境。Qt/Embedded通过Qt API与Linux I/O设施直接交互,成为嵌入式Linux端口。同Qt/X11相比,Qt/Embedded很省内存,因为它不需要一个X服务器或是Xlib库,它在底层摒弃了X11,采用framebuffer(帧缓冲)作为底层图形接口。同时,将外部输入设备抽象为keyboard和mouse输入事件。Qt/Embedde的应用程序可以直接写内核缓冲帧,这避免开发者使用繁琐的Xlib/Server系统。,6.2.1 Qt/Embedded介绍,6.2.1 Qt/Embedded介绍,(1)窗口系统 一个Qt/Embedded窗口系统包含了一个或多个进程,其中的一个进程可作为服务器。该服务进程会分配客户显示区域,以及产生鼠标和键盘事件。该服务进程还能够提供输入方法和一个用户接口给运行起来的客户应用程序。该服务进程其实就是一个有某些额外权限的客户进程。任何程序都可以在命令行上加上“-qws”的选项来把它作为一个服务器运行。 客户与服务器之间的通信使用共享内存的方法实现,通信量应该保持最小,例如客户进程直接访问帧缓冲来完成全部的绘制操作,而不会通过服务器,客户程序需要负责绘制它们自己的标题栏和其他式样。这就是Qt/Embedded库内部层次分明的处理过程。客户可以使用QCOP通道交换消息。服务进程简单的广播QCOP消息给所有监听指定通道的应用进程,接着应用进程可以把一个插槽连接到一个负责接收的信号上,从而对消息做出响应。消息的传递通常伴随着二进制数据的传输,这是通过一个QDataStream类的序列化过程来实现的,有关这个类的的描述,请读者参考相关资料。 QProcess类提供了另外一种异步的进程间通信机制。它用于启动一个外部的程序并且通过写一个标准的输入和读取外部程序的标准输出和错误码来和它们通信。,6.2.1 Qt/Embedded介绍,(2)字体 Qt/Embedded支持四种不同的字体格式:True Type字体(TTF),Postscript Type1字体,位图发布字体(BDF)和Qt的预呈现(Pre-rendered)字体(QPF)。Qt还可以通过增加Qfont-Factory的子类来支持其他字体,也可以支持以插件方式出现的反别名字体。 每个TTF或者TYPE1类型的字体首次在图形或者文本方式的环境下被使用时,这些字体的字形都会以指定的大小被预先呈现出来,呈现的结果会被缓冲。根据给定的字体尺寸(例如10或12点阵)预先呈现TTF或者TYPE1类型的字体文件并把结果以QPF的格式保存起来,这样可以节省内存和CPU的处理时间。QPF文件包含了一些必要的字体,这些字体可以通过makeqpf工具取得,或者通过运行程序时加上“-savefonts”选项获取。如果应用程序中使用到的字体都是QPF格式,那么Qt/Embedded将被重新配置,并排除对TTF和TYPE1类型的字体的编译,这样就可以减少Qt/Embedded的库的大小和存储字体的空间。例如一个10点阵大小的包含所有ASII字符的QPF字体文件的大小为1300Byte,这个文件可以直接从物理存储格式映射成为内存存储格式。 Qt/Embedded的字体通常包括Unicode字体的一部分子集,ASII和Latin-1。一个完整的16点阵的Unicode字体的存储空间通常超过1MB,我们应尽可能存储一个字体的子集,而不是存储所有的字,例如在一个应用中,仅仅需要以Cappuccino字体、粗体的方式显示产品的名称,但是却有一个包含了全部字形的字体文件。,6.2.1 Qt/Embedded介绍,(3)输入设备及输入法 Qt/Embedded3.0支持几种鼠标协议:BusMouse、IntelliMouse,Microsoft和MouseMan.Qt/Embedded还支持NECVr41XX和iPAQ的触摸屏。通过从QWSMouseHandler或者QcalibratedMouseHandler派生子类,开发人员可以让Qt/Embedded支持更多的客户指示设备。 Qt/Embedded支持标准的101键盘和Vr41XX按键,通过子类化QWSKeyboardHandler可以让Qt/Embedded支持更多的客户键盘和其他的非指示设备
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号