如何在Linux内核上建立窗口系统,这是嵌入式设备软件开发工程师必须了解的。Qt/Embedded是高端嵌入式设备PDA及手机的主流开发工具。作为一项成熟的技术,KDE桌面系统对于嵌入式窗口系统的设计有很大参考价值;Qtopia给嵌入式窗口系统提供了很好的框架。本书不仅阐述了KDE及X Window的机制,分析了Qt及Qt/Embedded开发工具的核心技术,而且还详细介绍了如何在嵌入式设备上建立Qtopia窗口系统。掌握了本书中所介绍的技能,读者可以在Linux内核上建立窗口系统,开发应用程序并能够在PC上模拟运行为嵌入式设备开发的应用程序。\r\n 本书主要针对从事开发Linux应用程序的软件工程师,也很适合作为大学教材和参考书。
第1章 X Window \r\n 1.1 X Window的体系结构 \r\n 1.2 窗口管理器 \r\n 1.3 X Window启动过程 \r\n 1.4 XFree86配置文件分析 \r\n 1.5 X Window程序设计简介 \r\n 1.6 显示驱动程序 \r\n 1.7 X Window协议 \r\n 1.8 X Client应用程序源代码分析 \r\n 1.9 X Server应用程序分析 \r\n第2章 Qt编程核心技术 \r\n 2.1 Qt概述 \r\n 2.2 Qt对象模型 \r\n 2.3 QObject类 \r\n 2.4 Qt国际化 \r\n 2.5 QMetaObject元对象类 \r\n 2.6 进程间通信--QCopChannel \r\n 2.7 窗口部件类 \r\n 2.8 Qt风格机制 \r\n 2.9 布局类 \r\n 2.10 Qt插件 \r\n 2.11 Qt模板库 \r\n 2.12 集合类 \r\n 2.13 Qt线程 \r\n 2.14 鼠标拖放 \r\n 2.15 键盘焦点 \r\n 2.16 会话管理 \r\n 2.17 调试技术 \r\n第3章 KDE窗口系统 \r\n 3.1 KDE 3.5源代码说明 \r\n 3.2 KDE类库 \r\n 3.3 系统资源访问 \r\n 3.4 图形支持 \r\n 3.5 用户界面 \r\n 3.6 MIME类型处理 \r\n 3.7 KDE服务 \r\n 3.8 KIO框架 \r\n 3.9 DCOP \r\n 3.10 KDE应用程序启动其他应用程序的方法 \r\n 3.11 国际化和本地化 \r\n 3.12 编译方法 \r\n 3.13 桌面框架 \r\n 3.14 组件框架 \r\n 3.15 KDE协议说明 \r\n 3.16 KDE启动 \r\n 3.17 kicker应用程序 \r\n第4章 Qt/Embedded客户/服务器 \r\n 4.1 各种嵌入式GUI \r\n 4.2 Qt/Embedded的应用示例 \r\n 4.3 帧缓冲 \r\n 4.4 创建应用程序 \r\n 4.5 构建服务器 \r\n 4.6 Qt/Embedded客户端与服务器通信 \r\n 4.7 输入设备与应用程序通信 \r\n 4.8 应用程序显示 \r\n 4.9 运行Qt/Embedded应用程序 \r\n 4.10 字符输入 \r\n 4.11 增加一个加速显示卡驱动程序到Qt/Embedded \r\n 4.12 Qt/Embedded作为VNC服务器 \r\n第5章 Qtopia的核心技术 \r\n第6章 Qtopia服务器 \r\n第7章 Qtopia的sysinfo应用程序分析 \r\n第8章 Qtopia编译及系统集成 \r\n主要参考文献
Linux操作系统已被广泛地使用到PC和各种嵌入式设备。笔者在《Linux内核分析及编程》(电子工业出版社2005年9月出版)中分析了内核的各种机制,本书作为它的配套书,主要讲述Linux操作系统的窗口系统设计。
目前主流的Linux窗口系统有:PC上使用的基于开放源代码的Gnome和KDE、嵌入式设备上使用的开放源代码Opie和Gpe,以及一些商业化的版本(如Motorola的PDA手机的窗口系统)。
GPE(Gpe Palmtop Environment)窗口系统最类似于桌面领域中的GNOME,它们都基于GTK,即一种基于C语言的GUI界面开发工具。
Opie(Open Palmtop Integrated Environment)窗口系统类似于桌面领域中的KDE,Opie基于Qtopia,Qtopia是基于Qt/Embedded的简化窗口系统。Opie在Qtopia的窗口系统机制上扩展了类库及应用程序,从而更加实用化,可以在多款PDA及PDA手机上完美运行。KDE窗口系统基于Qt/X11,Qt/X11又基于X Window系统。Qt/X11与Qt/Embedded具有相同接口的类库,对于应用程序编程者来说,可以使用相同的类进行开发。Qt是基于面向对象的C++的GUI界面开发工具,另外还提供了KDevelop和QDesigner IDE图形界面开发环境。
由于Qt具有面向对象、技术成熟等优点,并且目前高端嵌入式设备生产商几乎都选择Qt作为开发工具,因此本书选择Qt作为界面开发工具,选择KDE作为PC桌面环境,选择Qtopia嵌入式设备窗口系统进行分析介绍。
操作系统的窗口系统内容很广泛,对于PC,KDE桌面环境包括KOffice办公软件、网页/文件浏览器和系统工具等应用程序,它所依赖的X Window系统包括多种协议及API库;对于嵌入式设备,Opie包括了许多应用程序,Qt/Embedded包括了许多类库。这么多的内容在一本书中要想全面涉及是不可能的,本书主要针对专业开发所需要的深度,有重点地进行讲述。
本书特色与重点
本书主要讲述如何在Linux内核上建立窗口系统。
对于PC窗口系统,本书重点介绍KDE窗口系统如何在启动时从Linux内核上建立起来,以及输入设备及图形显示卡硬件如何与窗口界面中的控件进行交互;对于嵌入式设备窗口系统,介绍了Qtopia的应用程序管理器如何从Linux内核上启动运行,以及输入设备及图形显示卡硬件如何通过Qt/Embedded客户/服务器与窗口界面中的控件进行交互。由于KDE与Qtopia的窗口系统运行机制有许多相似之处,因此,本书重点讲述了Qtopia的应用程序管理器以及KDE的核心技术。笔者认为只要精通了Qtopia的编程,知道了KDE的核心技术以及与Qtopia编程的差别,并且仔细阅读KDE类库的说明文档,也能编写KDE应用程序。
在本书中,笔者几乎没有对KDE及Qt的类库进行说明。因为它们的API类库说明文档已说明得很详细,还可以参照源代码。通过对照阅读,读者就会明白各种类的用法。
关于作者
笔者从清华大学电子工程系读研究生起,就开始从事Linux内核编程工作,之后又一直在外国著名公司从事Linux内核编程工作;除了内核编程工作外,还从事过嵌入式设备的文件管理器及应用程序管理器等的开发工作。
读者对象及阅读方法
本书的读者对象为从事或准备从事Linux嵌入式设备开发的人员。为阅读本书,读者需具备C++面向对象编程方面的知识。
建议读者在阅读本书时在PC Linux操作系统下编译运行X 86平台的Qtopia,然后对照所运行的Qtopia窗口系统和Qtopia源代码来阅读,效果会更好。
写作目的
本书的写作目的是让读者对Linux窗口的建立过程,以及应用程序从窗口系统启动、文档的打开过程有个清晰的了解。本书中介绍的窗口的分层设计、接口标准化、菜单的通用化,以及应用程序查询硬件信息等设计方法,开发者有较高的参考价值。同时,本书还分析了Qt应用程序的编译过程,即qmake命令如何将项目文件转换成Makefile、依赖关系如何传递等,这些内容对开发者查找编译错误可提供清晰的思路。
结构安排
笔者认为,对于应用程序编程者来说,应该重点掌握类的继承关系及对象管理链表、事件、进程间通信、应用程序与桌面环境的交互等。因此,本书重点介绍了这些内容,而舍去了对类库及利用类库编写应用程序方面的介绍。
本书介绍了Qtopia,而没有介绍Opie。这是因为Opie使用了与Qtopia一样的机制,Opie只是扩展了类库与应用程序。更重要的是Qtopia由Trolltech公司维护,其提供了各种详细的文档。而且Qtopia代码量少,结构清晰,便于理解。如果读者理解了Qtopia,那么再看Opie代码就会很容易理解。
Opie中的代码更接近实际的产品,甚至Opie中的应用程序比许多产品化的应用程序写得还要完善,只要对它进行简单的修改便可用到产品中。
笔者长期从事Linux内核程序的开发,也经常要开发应用程序界面,比如使用Qt开发嵌入式设备的应用程序界面。有时,笔者还借助于应用程序界面与内核模块共同完成某些功能,如病毒防火墙。由于版权问题,笔者不可能将工作中开发的代码用做书中的源代码。但笔者在本书中尽量选择最贴近产品开发的开放源代码进行讲解,力求对读者的实际开发工作有帮助。
章节简介
第1章 “X Window”阐述了X的体系分层结构、显卡驱动程序、X协议,说明了建立在X上的各种编程方法,还分析了X客户端应用程序Xlib函数如何发出请求以及X服务器的工作原理及源代码。
第2章 “Qt编程核心技术”介绍了Qt对象模型、国际化方法、元对象及代码生成、进程间通信、窗口部件的基类、模板库和集合类、Qt线程、鼠标拖放、键盘焦点、会话管理,以及调试等方面的技术。
第3章 “KDE窗口系统”介绍了KDE的MIME类型处理、服务、KIO框架、组件框架和国际化等,还分析了KDE的启动过程及kicker应用程序。
第4章 “Qt/Embedded客户/服务器”讲述了将应用程序下载到嵌入式设备运行的方法,介绍了各种嵌入式GUI窗口系统,阐述了Qt/Embedded的客户/服务器模型工作过程。本章还分析了设备输入事件在客户与服务器之间的传递机制、应用程序窗口的显示原理,并说明了运行Qt/Embedded程序的方法。
第5章 “Qtopia核心技术”介绍了Qtopia开放源代码的核心技术及类库,其中着重分析了插件的装载过程、应用程序快速启动器的机制、类MimeType,以及编写输入法的方法等。
第6章 “Qtopia服务器”主要说明组成Qtopia服务器的各个类的功能,介绍了Qtopia服务器的启动过程,分析了Qtopia服务器如何启动应用程序及插件,还分析了电源监控、外观设置、应用程序安装与卸载以及AppServices等与系统管理相关的小应用程序。
第7章 “Qtopia的sysinfo应用程序分析”详细分析了sysinfo应用程序的源代码。
第8章 “Qtopia编译及系统集成”说明了Qtopia的定制与集成,阐述了.pro项目文件的语法。并且详细分析了由.pro项目文件生成Makefile文件的过程以及描述了Qtopia的打包、安装和调试方法。
本书用到的软件版本
Qtopia 2.1.1
Qt/Embedded 3.4
Qt/X11 3.4
KDE 3.5
X Window的x11R682
致谢
由于有上一本书与电子工业出版社博文视点公司成功合作的愉快经历,所以笔者继续将此书信任地交给该公司的朋友们编辑出版。郭立女士及她的同事对本书的关注和用心使笔者非常感激,感谢他们为我的上一本书及本书所做的大量工作。
建议与问题
笔者的上一本书《Linux内核分析及编程》出版后,许多读者通过网络发表了自己的评论和意见。为了方便读者发表自己的见解,笔者建立了自己的工作博客,网址如下:
http://nijili.blogcn.com
欢迎读者和专家访问指教,您可以提出自己的建议,指出书中的错误,还可以与网友一起分享和讨论阅读本书的收获以及有利于本书进一步改进的所有问题。
倪继利
2005年12月28日于北京
无封面