重庆工商大学第12章嵌入式Linux图形用户界面重庆工商大学内容提要12.1嵌入式GUI简介12.2Qt介绍12.3Qt4编程12.4Qt4/Embedded的嵌入式应用重庆工商大学本章主要介绍嵌入式Linux图形用户界面(GraphicUserInterface,GUI)的有关内容,即嵌入式GUI。在先简单介绍嵌入式GUI的相关内容的基础上,具体介绍Qt/Embedded图形编程。Qt/Embedded图形编程能够提高操作的人性化水平,优化产品性能、减轻用户认知负担,使程序更适合用户的操作需求。重庆工商大学12.1嵌入式GUI简介随着嵌入式系统的广泛应用,PDA、机顶盒、DVD播放机、WAP手机等嵌入式设备已经迅速普及;这些设备同时应该拥有华丽美观、易于操作的图形用户界面。在一些消费类产品中,图形用户界面已经成为必不可少的用户接口。重庆工商大学12.1.1嵌入式GUI的特点嵌入式GUI具备以下特点:占用的存储空间少;运行时占用资源少;运行速度及响应速度快;可靠性高;便于移植和定制。重庆工商大学12.1.2嵌入式GUI的种类目前,常用的嵌入式GUI系统:Qt/EmbeddedMicroWindowsMiniGUIOpenGUI等。重庆工商大学1.Qt/EmbeddedQt/Embedded是著名的Qt库开发商TrollTech开发的基于FrameBuffer、面向嵌入式系统的Qt版本。它的主要特点是:界面美观、色彩搭配好,使用与Qt/Windows和Qt/X11完全一致的API接口,许多基于Qt的程序可以非常方便地移植到嵌入式系统;同时他具有丰富的模块,用户可以根据需要选择Qt/Embedded的特性集合。Qt/Embedded实现了对下层输入设备的驱动和底层图形接口以及各基础类和API。重庆工商大学2.MicroWindowsMicroWindows是由美国CenturySoftware公司开发的开放源代码的嵌入式GUI项目。它不需要其他图形系统的支持,可以充分利用Linux提供的Framebuffer机制来进行图形显示。同时在底层提供了许多种芯片的支持,基本上用C语言来实现,因此移植性较强。MicroWindows支持两种API:ECMAAPIW(类Win32API)和Nano-XAPIs。这些API对Win32和XWindows系统有很好的兼容性,使程序可以很容易地从其他系统上移植过来。重庆工商大学3.MiniGUIMiniGUI是我国自主开发、比较成熟的一个图形用户界面系统,面向基于Linux的实时嵌入式系统,使用现有成熟的图形引擎(SV2GALib/LibGGI),采用类似WinCE的线程机制,集成了多字体和多字符集,支持硬件加速能力,充分利用显示内存。MiniGUI利用线程之间的同步操作,实现了客户线程和服务器线程之间的客户端和服务器结构,因为它的客户端和服务器端是同一进程的两个不同线程。它的核心实现主要体现在消息队列数据结构的使用上。重庆工商大学4.OpenGUIOpenGUI在Linux系统上的使用已经很长时间了。这个库是C++编写的,只提供C++接口。OpenGUI基于一个用汇编语言实现的X86图形内核,提供了一个高层的C/C++图形接口。OpenGUI提供了二维绘图函数原型、消息驱动的API及BMP文件格式支持。OpenGUI功能强大,使用方便,支持鼠标和键盘事件,在Linux上基于FrameBuffer实现绘图。由于OpenGUI基于汇编实现内核并利用MMX指令进行了优化,因此运行速度快,但是可移植性受到了较大的影响。重庆工商大学12.2Qt介绍Qt是Trolltech公司的一个标志性产品。Qt是一个支持多操作系统平台的应用程序开发框架,它的开发语言是C++。Qt是以工具开发包的形式提供给开发者的,这些工具开发包包括了图形设计器,Makefile制作工具,字体国际化工具,Qt的C++类库等;Qt的类库也是等价于MFC的开发库,但是Qt的类库是支持跨平台的类库。重庆工商大学12.2.1Qt/Embedded简介Qt/Embedded是在嵌入式环境下所使用的Qt,是专为嵌入式设备上的图形用户接口和应用开发而订做的C++工具开发包。它通常可以运行在多种不同的处理器部署的嵌入式Linux操作系统上。基于Qt/Embedded的应用程序可以直接对缓冲帧进行写操作。除了类库以外,Qt/Embedded还包括了几个提高开发速度的工具,使用标准的QtAPI,设计人员可以非常熟练的在Windows和UNIX编程环境里开发应用程序。重庆工商大学Qt/Embedded的实现结构底层硬件平台FrameBuffer输入设备驱动Linux设备驱动Qt/EmbeddedQt/Embedded应用程序重庆工商大学1.窗口系统一个Qt/Embedded窗口系统包含了一个或多个进程,其中的一个进程可作为服务器。这个服务进程分配客户显示区域,以及产生鼠标和键盘事件。这个服务进程还能够提供输入方法和一个用户接口给运行起来的客户应用程序。这个服务进程其实就是一个有某些额外权限的客户进程。任何程序都可以在命令行上加上“-qws”的选项来把它作为一个服务器运行。重庆工商大学客户与服务器之间的通信使用共享内存的方法实现客户可以使用QCOP通道交换消息。服务进程简单地广播QCOP消息给所有监听指定通道的应用进程,应用进程可以把一个插槽连接到一个负责接收的信号上,从而对消息做出响应消息的传递通常伴随着二进制数据的传输,这是通过一个QDataStream类的序列化过程来实现的重庆工商大学2.字体Qt/Embedded支持四种不同的字体格式:TrueType字体(TTF),PostscriptType1字体,位图发布字体(BDF)和Qt的预呈现(Pre-rendered)字体(QPF)。Qt还可以通过增加QFontFactory的子类来支持其它字体。重庆工商大学3.输入设备Qt/Embedded3.0支持几种鼠标协议:BusMouse、IntelliMouse、Microsoft和MouseMan。Qt/Embedded支持NECVr41XX和iPAQ的触摸屏。通过从QWSMouseHandler或者QcalibratedMouseHandler派生子类,Qt/Embedded可以支持更多的客户指示设备。Qt/Embedded支持标准的101键盘和Vr41XX按键,通过子类化QWSKeyboardHandler可以让Qt/Embedded支持更多的客户键盘和其它的非指示设备。重庆工商大学4.输入法对于非拉丁语系字符(例如阿拉伯,中文,希伯来和日语)的输入法,需要把它写成过滤器的方式,并改变键盘的输入。输入法的作者应该对全部的QtAPI的使用有完全的认识。在一个无键盘的设备上,输入法成了唯一的输入字符的手段。Qtpia提供了四种输入方法:笔迹识别器,图形化的标准键盘,Unicode键盘,基于字典方式提取的键盘。重庆工商大学5.屏幕加速通过子类化QScreen和QgfxRaster可以实现硬件加速,从而为屏幕操作带来好处。Trolltech提供了Mach64和Voodoo3视频卡的硬件加速的驱动例子,同时可以按照协议编写其它驱动程序。重庆工商大学12.2.2建立Qt开发环境直接使用Qt/Embedded编程不利于调试工作,因为程序的运行环境是目标机,而程序的编写与调试多在宿主机上进行。学会使用Qt进行编程,再推广到Qt/Embedded环境。Linux操作系统的机器上建立Qt开发环境。说明:以Qt4.4.3(qt-x11-opensource-src-4.4.3.tar.gz)为例介绍QT开发环境。重庆工商大学1)准备好安装环境下载Qt4.4.3版本的安装包(),并保存到相应的安装位置。确定好安装路径[root@vm-devlocal]#mkdirTrolltech[root@vm-devlocal]#cdTrolltech[root@vm-devTrolltech]#cp…./qt-x11-opensource-src-4.4.3.tar.gz.说明:建议单独建立一个目录来安装Qt4,本例安装到/usr/local/Trolltech目录下,(第三步的省略号是指所下载的安装包所在路径。)重庆工商大学2)解压安装包[root@vm-devTrolltech]#tar–zxvfqt-x11-opensource-src-4.4.3.tar.gz[root@vm-devTrolltech]#ls……[root@vm-devTrolltech]#cdqt-x11-opensource-src-4.4.3[root@vm-devqt-x11-opensource-src-4.4.3]#ls……说明:解压安装文件qt-x11-opensource-src-4.4.3.tar.gz后,会发现当前目录下新增了一个名为qt-x11-opensource-src-4.4.3的目录,可进入该目录查看该目录下的相关内容。重庆工商大学3)生成工程文件和Makefile执行配置命令./configure生成工程文件和Makefile等文件。[root@vm-devqt-x11-opensource-src-4.4.3]#./configure说明:该过程约持续20分钟,请读者耐心等待。重庆工商大学4)编译源文件执行命令gmake编译源文件。[root@vm-devqt-x11-opensource-src-4.4.3]#gmake说明:①编译过程中会弹出一些提示信息,选择输入yes即可。②该过程持续时间较长,约2~10个小时,具体时间长度与读者的计算机性能有关。重庆工商大学5)安装执行命令gmakeinstall进行安装。[root@vm-devqt-x11-opensource-src-4.4.3]#gmakeinstall说明:默认安装到/usr/local/Trolltech/qt-4.4.3目录下,安装时间约1~3小时。重庆工商大学6)设置环境变量在当前位置使用vi命令进入环境变量设置界面。并在文件最后添加上Qt相关环境变量设置项。[root@vm-devqt-x11-opensource-src-4.4.3]#vi/etc/bashrc在文件末尾添加内容如下:QTDIR=/usr/local/Trolltech/qt-4.4.3PATH=$QTDIR/bin:$PATHQMAKESPEC=$QTDIR/mkspecs/linux-g++LD_LIBRARRY_PATH=$QTDIR/lib:$LD_LIBRARRY_PATHexportQTDIRPATHQMAKESPECLD_LIBRARRY_PATH说明:环境变量主要与安装路径有关。重庆工商大学12.2.3Qtdesigner主界面重庆工商大学普通对话框是Qwidget类或它的子类的实例,客户自己的对话框类需要从Qwidget的子类继承。因此新建对话框界面时,模板应选择“widget”来创建。重庆工商大学Qtdesigner图形设计器使用示例重庆工商大学Qt图形设计器进行图形用户接口的设计可以消除应用程序的编译、链接和运行时间,同时使得修改图形用户接口的设计变得更容易。Qt图形设计器的预览功能可以使开发者能够在开发阶段看到各种样式的图形用户界面,包括用户界面。通过Qt集成的功能强大的数据库类,提供生动的数据库数据浏览和编辑操作。Qt图形设计器设计的图形界面以扩展名为“ui”的文件进行保存,这个文件可被uic(Qt提供的用户接口编译工具)编译成为C++的头文件和源文件。Qtdesigner图形设计器功能简介重庆工商大学12.3Qt4编程Qt4使用C++编程语言;Qt4使用“信号和槽”对应事件及其响应;编程内容非常丰富,本节通过几个实例程序来简单介绍Qt4编程方法。重庆工商大学12.3