4  在MC9328MX1上的应用

4.1Konqueror/embedded的移植

笔者在自行设计的基于Motorola Dragonball MC9328MX1芯片的开发板上成功移植了Konqueror/embedded。该开发板上运行嵌入式Linux,并以Qt/embedded2.3.7作为图形引擎库,上层运行Qtopia1.6。Konqueror/embedded是基于Qt的,并将依赖于Kde部分进行了简化和包含,因此,移植Konqueror/embedded到该开发板是完全可能的。

Konqueror/embedded提供了几十种编译选项,可以通过增减编译选项来定制适合不同平台,具有不同功能的Konqueror/embedded。

Konqueror/embedded的非核心组件的实现是在addons目录下,例如如果需要播放Flash支持,必须在编译选项中加入--enable-add-ons=kflashpart。在该部件中,默认是将声音关闭的,可以通过修改代码将声音开关打开。

由于MC9328MX1芯片是基于ARM架构的,所以移植的第一步是构建合适的交叉编译环境。笔者采用的是armlinuxg++编译器。编译过程与一般的Linux软件编译的过程相似;但是,将Konqueror/embedded编译成功之后,单独下载Konqueror/embedded的可执行文件Konqueror到开发板上运行将会出现致命的错误。因为Konqueror/embedded的运行需要两个主要文件——html4.css和charset,是分别关于样式表解析和字体设置的。

4.2Konqueror/embedded的汉化

Konqueror/embedded的汉化可分为两个部分:一个是Konqueror/embedded本身控制界面的汉化;另一个是Konqueror/embedded对中文网站的访问支持。和其他基于Qt的应用程序一样,Konqueror/embedded中对所有用户可见的文本使用;对所有文字形式的文本使用tr()。tr()将文本标识出来,这样利用Qt提供的翻译工具将很容易把这些文本转化成所需要的语言;同时,Qt提供了两个宏:QT_TR_NOOP()和QT_TRANSLATE_NOOP()。用它们标示出文本,以便于被lupdate工具提取。具体操作步骤如下:

在需要翻译源码的XXX.pro中加入一项:TRANSLATIONS=XXX.ts 。

运行lupdate XXX.pro,生成XXX.ts文件。该工具识别出tr()结构和上面描述的QT_*_NOOP宏,产生.ts文件(通常每种语言一个)。

运行lrelease XXX.pro将生成XXX.qm。这是一个没有翻译成其他语言的.qm文件(也可以用Qt Linguist生成),可以把它改名为 XXX_en.qm。

启动Qt Linguist将XXX.ts文件导入,将需要翻译的内容翻译成中文。翻译完成之后,点击File→Release,将文件保存为XXX_zh.qm。

翻译文件保存之后,在程序源码中需要构建Qtranslator实例,利用Qtranslator将翻译文件加载到图形界面上。

在Konqueror/embedded中可以通过修改main.c中的这段代码来实现UI的汉化:

QString qmFile= “XXX_zh.qm”

QTranslator *translator=new QTranslator (&app);

if (translator->load (qmFile))

app.installTranslator (translator);

else

delete translator;

为了让Konqueror/embedded能够浏览中文网页,需要理解Qt对字符编码的处理。在Qt中采用Unicode编码的方式来存储、描述和运用字符串。让Konqueror/embedded支持中文页面浏览实际上与让Qt支持中文字体的概念是一样的。Qt/embedded/Qtopia中能够识别以下四种字体格式,并且必须是Unicode编码的:

TrueType(TTF)——Scalable

PostScript Type1(PFA/PFB)——Scalable

Bitmap Distribution Format fonts(BDF)—— nonScalable

Qt prendered Font (QPF)——nonScalable

其中,QPF格式是Qt为了减小字符集体积和减小内存消耗而定义的一种字符存储格式。在Qt/embedded/Qtopia中,采用这种格式的字符集。

在Qt/embedded中,提供转换QPF字体的工具——makeqpf。它是一个基于Qt/embedded的程序,编译之后运行在QVFB中。我们采用的是Qt/embedded2.3.7版本的makeqpf,运行时需要先启动QVFB,程序makeqpf会自动查找文件$QTDIR/lib/fonts/fontdir;所以,在此之前需要设置好QTDIR,告诉makeqpf所需要转换的字符集的各种属性。将MS Windows下的字符集simsun .ttc复制到$QTDIR/lib/fonts目录下,改名为simsun .ttf,在文件fontdir中添加如下的一行:

字符集转换完成之后,Konqueror/embedded中用来管理属性的preference类会在重启之后自动搜索系统可用字符类型,新的字体名称将会出现在选项栏中,以供选择。

5总结

作为一款全功能的嵌入式浏览器,Konqueror/embedded运用了很多KDE程序设计的方法和思路。Kparts组件技术使得Konqueror/embedded具有良好的可扩展性,以适应不同用户或不同场合的应用;I/OSlave机制让Konqueror/embedded能够通过各种网络协议透明地访问网络文件;而作为KHTML引擎的核心——DOM,使得Konqueror/embedded能够正确地解析和渲染HTML/XML文件,并在DOM结构树上绑定ECAMScript引擎和CSS解析器。可见在结构上,Konqueror/embedded和其他现代浏览器具有相似之处。Konqueror/embedded是基于Qt工具套件的,因此,Konqueror/embedded只能运行在以Qt/embedded为基础的嵌入式设备上或运行Qt/X11的PC机上,这在一定程度上限制了它的广泛应用。但是,由于它实现了完整的浏览器功能,并且是完全免费的,所以Konqueror/embedded仍然具有很强的吸引力,同时对于其他的嵌入式浏览器设计,它所包含的很多设计思想是值得研究和借鉴的。

通过文章的详细描述,我们可以清楚以技术的眼光看待Konqueror,希望对你们有所帮助!

  • Konqueror简单介绍
  • 9.7.7 配置Konqueror
  • 9.7.1 Konqueror窗口
  • 9.7 KDE文件管理器和因特网客户端:Konqueror
  • 3.7.4 使用 Konqueror 来查看图像
  • KDE Konqueror HTTP REFERER验证信息泄露漏洞
  • KDE Konqueror处理HTTP Cookie中的安全标记失败漏洞


相关内容