第12章、Qt图形编程基础.pdf
《第12章、Qt图形编程基础.pdf》由会员分享,可在线阅读,更多相关《第12章、Qt图形编程基础.pdf(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 嵌入式学院华清远见旗下品牌:www.embedu.org 嵌入式学院华清远见旗下品牌:www.embedu.org 嵌入式 Linux 应用程序开发标准教程第 12 章、Qt 图形编程基础 嵌入式学院华清远见旗下品牌:www.embedu.org 第 12 章 Qt 图形编程基础 本章目标 掌握嵌入式 GUI 的种类和特点 掌握 Qt 中的信号与槽的机制 掌握 Qt/Embedded 的安装和配置 掌握 Qt/Embedded 应用程序的基本流程 嵌入式 Linux 应用程序开发标准教程第 12 章、Qt 图形编程基础 嵌入式学院华清远见旗下品牌:www.embedu.org 12.1 嵌入
2、式 GUI 简介 目前的桌面机操作系统大多有着美观、操作方便、功能齐全的 GUI(图形用户界面),例如 KDE 或者 GNOME。GUI(图形用户界面)是指计算机与其使用者之间的对话接口,可以说,GUI 是当今计算机技术的重大成就。它的存在为使用者提供了友好便利的界面,并大大地方便了非专业用户的使用,使得人们从繁琐的命令中解脱出来,可以通过窗口、菜单方便地进行操作。而在嵌入式系统中,GUI 的地位也越来越重要,但是不同于桌面机系统,嵌入式GUI 要求简单、直观、可靠、占用资源小且反应快速,以适应系统硬件资源有限的条件。另外,由于嵌入式系统硬件本身的特殊性,嵌入式 GUI 应具备高度可移植性与可
3、裁减性,以适应不同的硬件条件和使用需求。总体来讲,嵌入式 GUI 具备以下特点:n 体积小;n 运行时耗用系统资源小;n 上层接口与硬件无关,高度可移植;n 高可靠性;n 在某些应用场合应具备实时性。UNIX 环境下的图形视窗标准为 X Window System,Linux 是类 UNIX 系统,所以顶层运行的 GUI 系统是兼容 X 标准的 XFree86 系统。X 标准大致可以划分 X Server、Graphic Library(底层绘图函数库)、Toolkits、Window Manager 等几大部分。其好处是具有可扩展性、可移植性等优点,但对于嵌入式系统而言无疑太过庞大、累赘、低
4、效。目前流行的嵌入式 GUI 与 X 思路不同,这些 GUI 一般不局限于 X 标准,更强调系统的空间和效率。12.1.1 Qt/Embedded 表 12.1 归纳了 Qt/Embedded 的一些优缺点。表 12.1 Qt/Embedded 分析 Qt/Embedded 分析 以开发包形式提供 包括了图形设计器、Makefile 制作工具、字体国际化工具、Qt 的 C+类库等 跨平台 支持 Microsoft Windows 95/98/2000、Microsoft Windows NT、MacOS X、Linux、Solaris、HP-UX、Tru64(Digital UNIX)、Iri
5、x、FreeBSD、BSD/OS、SCO、AIX 等众多平台 类库支持跨平台 Qt 类库封装了适应不同操作系统的访问细节,这正是 Qt 的魅力所在 优点 模块化 可以任意裁减 缺点 结构也过于复杂臃肿,很难进行底层的扩充、定制和移植 例如:尽管 Qt/Embedded 声称,它最小可以裁剪到几百 K,但这时的Qt/Embedded 库已经基本失去了使用价值 它提供的控件集沿用了 PC 风格,并不太适合许多手持设备的操作要求 Qt/Embedded 的底层图形引擎只能采用 framebuffer,只是针对高端嵌入式图形领域的应用而设计的 由于该库的代码追求面面俱到,以增加它对多种硬件设备的支持,
6、嵌入式 Linux 应用程序开发标准教程第 12 章、Qt 图形编程基础 嵌入式学院华清远见旗下品牌:www.embedu.org 造成了其底层代码比较凌乱,各种补丁较多的问题 12.1.2 MiniGUI 提起国内的开源软件,就肯定会提到 MiniGUI,它由魏永明先生和众多志愿者开发,是一个基于 Linux 的实时嵌入式系统的轻量级图形用户界面支持系统。MiniGUI 分为最底层的 GAL 层和 IAL 层,向上为基于标准 POSIX 接口中 pthread库的 Mini-thread 架构和基于 Server/Client 的 Mini-Lite 架构。其中前者受限于 thread 模式
7、对于整个系统的可靠性进程中某个 thread 的意外错误可能导致整个进程的崩溃,该架构应用于系统功能较为单一的场合。Mini-Lite 应用于多进程的应用场合,采用多进程运行方式设计的 Server/Client 架构能够较好地解决各个进程之间的窗口管理、Z 序剪切等问题。MiniGUI 还有一种从 Mini-Lite 衍生出的 standalone 运行模式。与 Lite 架构不同的是,standalone 模式一次只能以窗口最大化的方式显示一个窗口。这在显示屏尺寸较小的应用场合具有一定的应用意义。MiniGUI 的 IAL 层技术 SVGA lib、LibGGI、基于 framebuffe
8、r 的 native 图形引擎以及哑图形引擎等,对于 Trolltech 公司的 QVFB 在 X Window 下也有较好的支持。IAL层则支持 Linux 标准控制台下的 GPM 鼠标服务、触摸屏、标准键盘等。MiniGUI 下丰富的控件资源也是 MiniGUI 的特点之一。当前 MiniGUI 的最新版本是 1.3.3。在该版本的控件中已经添加了窗口皮肤、工具条等桌面 GUI 中的高级控件支持。对比其他系统,“Mini”是 MiniGUI 的特色,轻量、高性能和高效率的 MiniGUI已经应用在电视机顶盒、实时控制系统、掌上电脑等诸多场合。12.1.3 Microwindows、Tiny
9、 X 等 Microwindows Open Source Project 成立的宗旨在于针对体积小的装置,建立一套先进的视窗环境,在 Linux 桌面上通过交叉编译可以很容易地制作出 Microwindows的程序。Microwindows 能够在没有任何操作系统或其他图形系统的支持下运行,它能对裸显示设备进行直接操作。这样,Microwindows 就显得十分小巧,便于移植到各种硬件和软件系统上。然而 Microwindows 的免费版本进展一直很慢,几乎处于停顿状态,而且至今为止,国内没有任何一家对 Microwindows 提供全面技术支持、服务和担保的专业公司。Tiny X Serv
10、er 是 XFree86 Project 的一部分,由 Keith Pachard 发展起来的,而他本身就是 XFree86 专案的核心成员之一。一般的 X Server 都过于庞大,因此 Keith Packard 就以 XFree86 为基础,精简而成 Tiny X Server,它的体积可以小到几百 KB,非常适合应用于嵌入式环境。就纯 X Window System搭配 Tiny X Server 架构来说,其最大的优点就是具有很好的弹性开发机制,并能大大提高开发速度。因为与桌面的 X 架构相同,因此相对于很多以 Qt、GTK+、FLTK 等为基础开发的软件可以很容易地移植过来。虽然移
11、植方便,但是却有体积大的缺点,由于很多软件本来是针对桌面环境开发的,因此无形之中具备了桌面环境中很多复杂的功能。因此“调校”变成采用此架构最大的课题,有时候重新改写可能比调校所需的时间还短。表 12.2 总结了常见 GUI 的参数比较。嵌入式 Linux 应用程序开发标准教程第 12 章、Qt 图形编程基础 嵌入式学院华清远见旗下品牌:www.embedu.org 表 12.2 常见 GUI 参数比较 名 称 参 数 MiniGUI OpenGUI Qt/Embedded API(完备性)Win32(很完备)私有(很完备)Qt(C)(很完备)函数库的典型大小 300KB 300KB 600KB
12、 移植性 很好 只支持 x86 平台 较好 授权条款 LGPL LGPL QPL/GPL 系统消耗 小 最小 最大 操作系统支持 Linux Linux,DOS,QNX Linux 12.2 Qt/Embedded 开发入门 12.2.1 Qt/Embedded 介绍 1架构 Qt/Embedded 以原始 Qt 为基础,并做了许多出色的调整以适用于嵌入式环境。Qt/Embedded 通过 Qt API 与 Linux I/O 设施直接交互,成为嵌入式 Linux 端口。同 Qt/X11 相比,Qt/Embedded很省内存,因为它不需要一个 X 服务器或是 Xlib 库,它在底层抛弃了 X
13、lib,采用 framebuffer(帧缓冲)作为底层图形接口。同时,将外部输入设备抽象为 keyboard 和 mouse 输入事件。Qt/Embedde 的应用程序可以直接写内核缓冲帧,这避免开发者使用繁琐的 Xlib/Server 系统。图 12.1 所示比较了 Qt/Embedded 与Qt/X11 的架构区别。使用单一的 API 进行跨平台的编程可以有很多好处。提供嵌入式设备和桌面计算机环境下应用的公司可以培训开发人员使用同一套工具开发包,这有利于开发人员之间共享开发经验与知识,也使得管理人员在分配开发人员到项目中的时候增加灵活性。更进一步来说,针对某个平台而开发的应用和组件也可以销
14、售到 Qt 支持的其他平台上,从而以低廉的成本扩大产品的市场。(1)窗口系统。一个 Qt/Embedded 窗口系统包含了一个或多个进程,其中的一个进程可作为服务器。该服务进程会分配客户显示区域,以及产生鼠标和键盘事件。该服务进程还能够提供输入方法和一个用户接口给运行起来的客户应用程序。该服务进程其实就是一个有某些额外权限的客户进程。任何程序都可以在命令行上加上“-qws”的选项来把它作为一个服务器运行。客户与服务器之间的通信使用共享内存的方法实现,通信量应该保持最小,例如 应用源代码 Qt API Qt/Embedded Qt/X11 Qt/XLib X Window Server帧缓冲 L
15、inux 内核 图 12.1 Qt/Embedded 与X11 的 Linux 版本的比较 嵌入式 Linux 应用程序开发标准教程第 12 章、Qt 图形编程基础 嵌入式学院华清远见旗下品牌:www.embedu.org 客户进程直接访问帧缓冲来完成全部的绘制操作,而不会通过服务器,客户程序需要负责绘制它们自己的标题栏和其他式样。这就是 Qt/Embedded 库内部层次分明的处理过程。客户可以使用 QCOP 通道交换消息。服务进程简单的广播 QCOP 消息给所有监听指定通道的应用进程,接着应用进程可以把一个插槽连接到一个负责接收的信号上,从而对消息做出响应。消息的传递通常伴随着二进制数据的
16、传输,这是通过一个QDataStream类的序列化过程来实现的,有关这个类的描述,请读者参考相关资料。QProcess 类提供了另外一种异步的进程间通信机制。它用于启动一个外部的程序并且通过写一个标准的输入和读取外部程序的标准输出和错误码来和它们通信。(2)字体 Qt/Embedded 支持 4 种不同的字体格式:True Type 字体(TTF),Postscript Type1字体,位图发布字体(BDF)和 Qt 的预呈现(Pre-rendered)字体(QPF)。Qt 还可以通过增加 Qfont-Factory 的子类来支持其他字体,也可以支持以插件方式出现的反别名字体。每个 TTF 或
17、者 TYPE1 类型的字体首次在图形或者文本方式的环境下被使用时,这些字体的字形都会以指定的大小被预先呈现出来,呈现的结果会被缓冲。根据给定的字体尺寸(例如 10 或 12 点阵)预先呈现 TTF 或者 TYPE1 类型的字体文件并把结果以 QPF 的格式保存起来,这样可以节省内存和 CPU 的处理时间。QPF 文件包含了一些必要的字体,这些字体可以通过 makeqpf 工具取得,或者通过运行程序时加上“-savefonts”选项获取。如果应用程序中使用到的字体都是 QPF 格式,那么Qt/Embedded 将被重新配置,并排除对 TTF 和 TYPE1 类型的字体的编译,这样就可以减少 Qt
18、/Embedded 的库的大小和存储字体的空间。例如一个 10 点阵大小的包含所有 ASCII 字符的 QPF 字体文件的大小为 1300 字节,这个文件可以直接从物理存储格式映射成为内存存储格式。Qt/Embedded 的字体通常包括 Unicode 字体的一部分子集,ASCII 和 Latin-1。一个完整的 16 点阵的 Unicode 字体的存储空间通常超过 1MB,我们应尽可能存储一个字体的子集,而不是存储所有的字,例如在一个应用中,仅仅需要以 Cappuccino 字体、粗体的方式显示产品的名称,但是却有一个包含了全部字形的字体文件。(3)输入设备及输入法。Qt/Embedded
19、3.0 支持几种鼠标协议:BusMouse、IntelliMouse,Microsoft 和MouseMan.Qt/Embedded 还支持 NECVr41XX 和 iPAQ 的触摸屏。通过从 QWSMouseHandler 或者Qcalibra-tedMouseHandler 派生子类,开发人员可以让 Qt/Embedded 支持更多的客户指示设备。Qt/Embedded 支 持 标 准 的101键 盘 和Vr41XX按 键,通 过 子 类 化QWSKeyboardHandler可以让Qt/Embedded支持更多的客户键盘和其他的非指示设备。对于非拉丁语系字符(例如阿拉伯、中文、希伯来和日
20、语)的输入法,需要把它写成过滤器的方式,并改变键盘的输入。输入法的作者应该对全部的 Qt API 的使用有完整的认识。在一个无键盘的设备上,输入法成了惟一的输入字符的手段。Qtopia 提供了 4 种输入方法:笔迹识别器、图形化的标准键盘、Unicode 键盘和基于字典方式 嵌入式 Linux 应用程序开发标准教程第 12 章、Qt 图形编程基础 嵌入式学院华清远见旗下品牌:www.embedu.org 提取的键盘。(4)屏幕加速 通过子类化 QScreen和 QgfxRaster 可以实现硬件加速,从而为屏幕操作带来好处。Troll-tech 提供了 Mach64 和 Voodoo3 视频卡
21、的硬件加速的驱动例子,同时可以按照协议编写其他的驱动程序。2Qt 的开发环境 Qt/Embedded 的开发环境可以取代那些我们熟知的 UNIX 和 Windows 开发工具。它提供了几个跨平台的工具使得开发变得迅速和方便,尤其是它的图形设计器。UNIX下的开发者可以在 PC 机或者工作站使用虚拟缓冲帧,从而可以模仿一个和嵌入式设备的显示终端大小,像素相同的显示环境。嵌入式设备的应用可以在安装了一个跨平台开发工具链的不同的平台上编译。最通常的做法是在一个UNIX系统上安装跨平台的带有libc库的GNU C+编译器和二进制工具。在开发的许多阶段,一个可替代的做法是使用 Qt 的桌面版本,例如通过
22、 Qt/X11 或是 Qt/Windows 来进行开发。这样开发人员就可以使用他们熟悉的开发环境,例如微软公司的 Visual C+或者 Borland C+。在 UNIX 操作系统下,许多环境也是可用的,例如Kdevelop,它也支持交互式开发。如果 Qt/Embedded 的应用是在 UNIX 平台下开发的话,那么它就可以在开发的机器上以一个独立的控制台或者虚拟缓冲帧的方式来运行,对于后者来说,其实是有一个 X11 的应用程序虚拟了一个缓冲帧。通过指定显示设备的宽度、高度和颜色深度,虚拟出来的缓冲帧将和物理的显示设备在每个像素上保持一致。这样每次调试应用时开发人员就不用总是刷新嵌入式设备的
23、 Flash 存储空间,从而加速了应用的编译、链接和运行周期。运行 Qt 的虚拟缓冲帧工具的方法是在 Linux 的图形模式下运行以下命令:qvfb(回车)当 Qt 嵌入式的应用程序要把显示结果输出到虚拟缓冲帧时,我们在命令行运行这个程序,并在程序名后加上-qws 的选项。例如:$helloqws。3Qt 的支撑工具 Qt 包含了许多支持嵌入式系统开发的工具,有两个最实用的工具是 qmake 和 Qt designer(图形设计器)。n qmake 是一个为编译 Qt/Embedded 库和应用而提供的 Makefile 生成器。它能够根据一个工程文件(.pro)产生不同平台下的 Makefi
24、le 文件。qmake 支持跨平台开发和影子生成,影子生成是指当工程的源代码共享给网络上的多台机器时,每台机器编译链接这个工程的代码将在不同的子路径下完成,这样就不会覆盖别人的编译链接生成的文件。qmake 还易于在不同的配置之间切换。n Qt 图形设计器可以使开发者可视化地设计对话框而不需编写代码。使用 Qt 嵌入式 Linux 应用程序开发标准教程第 12 章、Qt 图形编程基础 嵌入式学院华清远见旗下品牌:www.embedu.org 图形设计器的布局管理可以生成能平滑改变尺寸的对话框。qmake 和 Qt 图形设计器是完全集成在一起的。12.2.2 Qt/Embedded 信号和插槽机
25、制 1机制概述 信号和插槽机制是 Qt的核心机制,要精通Qt编程就必须对信号和插槽有所了解。信号和插槽是一种高级接口,应用于对象之间的通信,它是 Qt 的核心特性,也是 Qt区别于其他工具包的重要地方。信号和插槽是 Qt 自行定义的一种通信机制,它独立于标准的 C/C+语言,因此要正确地处理信号和插槽,必须借助一个称为 moc(Meta Object Compiler)的 Qt 工具,该工具是一个 C+预处理程序,它为高层次的事件处理自动生成所需要的附加代码。所谓图形用户接口的应用就是要对用户的动作做出响应。例如,当用户单击了一个菜单项或是工具栏的按钮时,应用程序会执行某些代码。大部分情况下,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 Qt 图形 编程 基础
限制150内