ch13基于qtembedded的嵌入式图形用户界面设计剖析

上传人:今*** 文档编号:107471843 上传时间:2019-10-19 格式:PPT 页数:47 大小:476KB
返回 下载 相关 举报
ch13基于qtembedded的嵌入式图形用户界面设计剖析_第1页
第1页 / 共47页
ch13基于qtembedded的嵌入式图形用户界面设计剖析_第2页
第2页 / 共47页
ch13基于qtembedded的嵌入式图形用户界面设计剖析_第3页
第3页 / 共47页
ch13基于qtembedded的嵌入式图形用户界面设计剖析_第4页
第4页 / 共47页
ch13基于qtembedded的嵌入式图形用户界面设计剖析_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《ch13基于qtembedded的嵌入式图形用户界面设计剖析》由会员分享,可在线阅读,更多相关《ch13基于qtembedded的嵌入式图形用户界面设计剖析(47页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统原理与应用技术 袁志勇 王景存 章登义 刘树波 北京: 北京航空航天大学出版社, 2009.11 PPT教学课件,第13章 基于QtEmbedded的嵌入式图形用户界面设计,13.1 嵌入式图形用户界面简介 13.2 创建Qt/Embedded嵌入式图形开发 13.3 Qt/Embedded的使用 13.4 Qt/Embedded应用举例,13.1 嵌入式图形用户界面简介,本节首先概述了 Linux 图形领域的基本设施,然后描述了一些可供嵌入式 Linux 使用的高级图形库以及图形用户界面支持。希望对嵌入式 Linux 的开发有所帮助。,Linux 图形领域的基础设施,首先向读者描述

2、 Linux 图形领域中常见的基础设施。之所以称为基础设施,是因为这些(或者函数库),一般作为其他高级图形或者图形应用程序的基本函数库。这些(或者函数库)包括:X Window、SVGALib、FrameBuffer 等等。 提起 Linux 上的图形,许多人首先想到的是 X Window。这是目前LINUX操作系统中处于主导地位的桌面图形。 X WINDOW特点: X Window是在UNIX/Linux操作系统中提供图形化用户界面(GUI)支持的视窗系统(Window System),也被称为X。 微软的Windows系统与操作系统本身紧密结合,成为视窗操作系统;而X Window并不是操

3、作系统, 只是UNIX/Linux操作系统下的一个应用程序,两者之间也没有任何关系。 换句话说,微软的图形支持是内核级别的,而Linux的 X Window则是应用程序级别的。 X Window 是一个跨平台的操作环境,也就是在不同操作系统上都可以运行。 X Window是一个商业软件,由X Consortium负责开发和维护,现在的最新版本为X11R6 (X Version 11, Release 6)。,X WINDOW结构: X-Window采用的是C/S结构。X由三部分组成:X Server, X client, X protocol. “X Server“运行在有键盘,鼠标,显示器的

4、计算机上。Server的作用是管理显示信息,处理来自键盘和鼠标的输入等。 每个X应用程序(如XTerm,Netscape等)就是一个client. Client给Server发送信息,如“请在这些坐标上画一个窗口“, 而服务器返回处理信息, 如”用户刚刚点击了OK按钮“。窗口管理程序也是一个client, server只附则调用驱动提供的函数驱动显示设备绘图,所以它对硬件要求不高。 在X中,Server和Client的概念和一般的正好相反。如果有多台机器,那么在桌面计算机上运行的是X Server,而在比较高档的服务器上运行的则是X应用程序。X Server是有键盘和显示器的那台计算机,而X

5、Client则是那些显示窗口的程序。Client和Server不一定要运行在同一种操作系统上,它们甚至无需在同一种类型的计算机上运行。 此外,X-Window还包括如下组件: X Library 最底层的图形库,大家熟悉的X Library有XLib、Motif、Qt和Gimp library等。 X Toolkit X-Window基本函数和图形组件库,即Widgets。常见的widgets有MDT、GTK和TCL/TK等。 X Protocol 沟通X Server和X Client间的通信协议。,无疑,X Window 作为一个图形环境是成功的,它上面运行着包括 CAD建模工具和办公套件

6、在内的大量应用程序。但必须看到的是,由于 X Window 在体系接口上的原因,限制了其对游戏、多媒体的支持能力。用户在 X Window 上运行 D 播放器,或者运行一些大型的三维游戏时,经常会发现同样的硬件配置,却不能获得和 Windows 操作一样的图形效果即使使用了加速的 X Server,其效果也不能令人满意。另外,大型的应用程序(比如 Mozilla 浏览器)在 X Window 上运行时的响应能力,也相当不能令人满意。当然,这里有 Linux 内核在进程调度上的问题,也有 X Window 的原因。 X Window 为了满足对游戏、多媒体等应用对图形加速能力的要求,提供了 DG

7、A(直接图形访问)扩展,通过该扩展,应用程序可以在全屏模式下直接访问显示卡的帧缓冲区,并能够提供对某些加速功能的支持。,FrameBuffer FrameBuffer是出现在2.2.xx内核中的一种驱动程序接口。由于Linux工作在保护模式,所以用户态进程无法像DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。在使用Framebuffer时,Linux是将显卡置于图形模式下的。Framebuffer就是模仿显卡的功能,相当于抽象的显卡硬件结构,实现了通过Framebuffer的读写直接对显存进行操作。用户可以将F

8、ramebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反映在屏幕上。这种操作是抽象的、统一的。用户不必关心物理显存的位置、换页机制等具体细节,因为这些都是由Framebuffer设备驱动来完成的。 FrameBuffer设备还提供了若干ioctl命令,通过这些命令,可以获得显示设备的一些固定信息(例如显示内存大小)、与显示模式相关的可变信息(例如,分辨率、像素结构、每扫描线的字节宽度),以及伪彩色模式下的调色板信息等。通过FrameBuffer,还可以获得当前内核所支持的加速显示卡的类型(通过固定信息得到),这种类型通常是和特定显示芯

9、片相关的。例如,目前最新的内核(2.4.9)中,就包含有对S3、Matrox、nVidia、3Dfx等流行显示芯片的加速支持。在获得了加速芯片类型之后,应用程序可以将PCI设备的内存I/O(memio)映射到进程的地址空间。这些memio一般是用来控制显示卡的寄存器,通过对这些寄存器的操作,应用程序可以控制特定显卡的加速功能。但由于Framebuffer本身不具备任何运算数据的能力,只是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中的设备。所以,对于应用程序而言,如果希望在FrameBuffer之上进行图形编程,还需要自己动手完成其他许多工作。举个例子来讲,FrameBuffe

10、r就像一张画布,使用什么样的画笔、如何画画,还需要用户自己动手完成。在这种机制下,尽管Framebuffer需要真正的显卡驱动的支持,但由于所有显示任务都由CPU完成,因此CPU负担很重。,SVGALib SVGALib是Linux系统中最早出现的非X图形支持库,是Linux下的VGA驱动函数库。虽然它的品质有点低,支援显卡种类也不多,但是有许多的游戏及程序都是用它来做开发,可以算是非官方的标准了。这个库从最初对标准VGA兼容芯片的支持开始,已经发展到对老式SVGA芯片,以及现今流行的高级视频芯片的支持。它为用户提供了在控制台上进行图形编程的接口,使用户可以在PC兼容系统上方便地获得图形支持。

11、但该系统也存在一些不足: SVGALib从最初的vgalib发展而来,保留了老系统的许多接口,而这些接口却不能良好地适应新显示芯片的图形能力。 未能较好地隐藏硬件细节。许多操作,不能自动使用显示芯片的加速能力支持。 可移植性差。SVGALib目前只能运行在x86平台上,除Alpha平台,对其他平台的支持能力较差。 SVGALib作为一个老的图形支持库,目前的应用范围越来越小,尤其在Linux内核增加了FrameBuffer驱动支持之后,有逐渐被其他图形库替代的趋势。 4LibGGI LibGGI是一个跨平台的绘图库,可以建立一个一般性的图形接口,这个抽象接口连同相关的输入(鼠标、键盘、游戏杆等

12、)接口一起,可以方便地运行在X Window、SVGALib、FrameBuffer等之上。建立在LibGGI之上的应用程序,不经重新编译,就可以在上述这些底层图形接口上运行。 在Linux上,LibGGI是通过调用FrameBuffer或SVGALib来完成图形操作的,可能速度比较慢。但在某些不支持FrameBuffer或vga的系统上,采用LibGGI仍然是一种不错的选择。,嵌入式GUI高级函数库,1Xlib及其他相关函数库 在X Window系统中进行图形编程时,可以选择直接使用Xlib。Xlib实际上是对底层 X 协议的封装,可通过该函数库进行一般的图形输出。如果用户的X Server

13、支持DGA,则可以通过DGA扩展直接访问显示设备,从而获得加速支持。 2SDL(Simple DirectMedia Layer) SDL是一个跨平台的多媒体游戏支持库。其中包含了对图形、声音、游戏杆、线程等的支持,目前可以运行在许多平台上。SDL支持图形的功能强大,高级图形处理能力尤为突出,可以实现Alpha混合、透明处理、YUV覆盖、Gamma校正等。在SDL环境中能够非常方便地加载支持OpenGL的Mesa库,从而提供对二维和三维图形的支持。 3Allegro Allegro是一个专门为x86平台设计的游戏图形库。最初的Allegro运行在DOS环境下,目前也可运行在Linux Fram

14、eBuffe控制台、Linux SVGALib、X Window等系统上。Allegro提供了丰富的图形功能,包括矩形填充和样条曲线生成等,而且具有较好的三维图形显示能力。由于Allegro的许多关键代码是采用汇编编写的,所以该函数库具有运行速度快、占用资源少的特点。 4Mesa3D Mesa3D是一个兼容OpenGL规范的开放源码函数库,是目前Linux上提供专业三维图形支持的惟一选择。Mesa3D也是一个跨平台的函数库,能够运行在X Window、X Window with DGA、BeOS、Linux SVGALib等平台上。 5DirectFB DirectFB是特别为Linux Fr

15、ameBuffer加速的一个图形库,正在尝试建立一个兼容GTK(GIMP Toolkit)的嵌入式GUI系统。,面向嵌入式Linux 的图形用户界面,Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计的图形用户界面的工具包,由挪威Trolltech公司开发,最初作为跨平台的开发工具用于Linux台式机。它支持各种有UNIX 和Microsoft Windows特点的系统平台。Qt/Embedded以原始Qt为基础,许多基于Qt的X Window程序可以非常方便地移植到Qt/Embedded上,因此,自从Qt/Embedded以GPL条款形式发布以来,就有大量的嵌入式Linux开发商

16、转到了Qt/Embedded系统上,比如,韩国的Mizi公司。 Qt/Embedded通过Qt API与Linux I/O设备直接交互,是面向对象编程的理想环境。面向对象的体系结构使代码结构化、可重用并且运行快速,与其他GUI相比,Qt GUI非常快,没有分层,这使得Qt/Embedded成为基于Qt的程序的最紧凑环境。 Qt/Embedded延续了Qt在X上的强大功能,在底层摒弃了X lib,仅采用FrameBuffer作为底层图形接口。同时,将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、GPM鼠标、触摸屏,以及用户自定义的设备等。 Qt/Embedded类库完全采用C+封装,丰富的控件资源和较好的可移植性是Qt/Embedded最为突出的优点。它的类库接口完全兼容于同版本的Qt-X11,使用X下的开发工具可以直接开发基于Qt/Embedded的应用程序GUI。,Qt/Embedded,Microwindows/Nano-X,Microwindows是Century Software的开放源代码项目,设计用于带

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号