日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
嵌入式瀏覽器Konqueror/embedded的技術(shù)分析
嵌入式瀏覽器Konqueror/embedded的技術(shù)分析
 更新時(shí)間:2008-8-18 9:55:45  點(diǎn)擊數(shù):18
【字體: 字體顏色

(2) Konqueror/embedded中組件實(shí)現(xiàn)技術(shù)
以Konqueror/embedded中文本編輯器組件(Kplaintextpart)為例,組件必須要由三個(gè)元素組成,包括窗口構(gòu)件、組件功能和用戶界面。窗口構(gòu)件必須是 QWidget 的子代,Konqueror/embedded中的文本編輯器繼承于QmultiLineEdit類;除了窗口構(gòu)件外,還需要組件提供的功能,Konqueror/embedded的中文本編輯器提供前進(jìn)、后退、剪切、復(fù)制和全選等附加功能;當(dāng)然還要提供訪問那些功能的用戶界面(操作以及 XML文件)。Konqueror/embedded中的文本編輯器只提供了窗口構(gòu)件功能的菜單項(xiàng)。在XML格式文件Kplaintextpart.rc中定義其用戶界面的布局,它和應(yīng)用程序代碼是分開的。當(dāng)該文本編輯器被嵌入到Konqueror/embedded時(shí),采用稱為XMLGUI的技術(shù)將組件菜單和原來的用戶界面合并。
Konqueror/embedded中的文本編輯器組件構(gòu)成如圖3所示。
圖3文本編輯器組件結(jié)構(gòu)Kparts組件的最大特征在于它的可重用性。要做到這一點(diǎn),就必須將組件編譯到共享庫中。希望動態(tài)地打開共享庫的應(yīng)用程序使用 KLibLoader 類。KLibLoader 處理庫的定位、打開以及調(diào)用初始化函數(shù)。初始化函數(shù)是庫的入口點(diǎn)。這個(gè)初始化函數(shù)創(chuàng)建一個(gè)工廠,由組件的工廠來創(chuàng)建組件。具體的實(shí)現(xiàn)方法如圖4所示。
3.3KHTML繪制引擎的實(shí)現(xiàn)
KHTML引擎作為 Konqueror/embedded的核心,包含了dom、xml、html、css、rendering、misc、ecma七個(gè)子目錄。這幾個(gè)子目錄的功能分別如圖5所示。
從這個(gè)功能結(jié)構(gòu)圖可以看出,Konqueror/embedded的KHTML引擎是基于XML的DOM技術(shù)來構(gòu)建的,與現(xiàn)在的大部分瀏覽器的架構(gòu)是相似的。DOM是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。在這種層次結(jié)構(gòu)中可以利用導(dǎo)航儀搜尋特定的信息。同時(shí),DOM還提供了一套API,可以用JAVA,C++或C來實(shí)現(xiàn)這些API。
現(xiàn)在最常用的解析XML文件的方法有四種:文檔對象模型(DOM,Document Object Model)、用于XML的簡單API(SAX,Simple API for XML)、JDOM和用于XML解析的Java API(JAXP,Java API for XML Parsing)。它們有各自的優(yōu)點(diǎn)和弱點(diǎn),因而適用在不同的場合。Konqueror/embedded中采用的是DOM技術(shù)。它所提供的接口和方法可以對構(gòu)建的DOM樹的節(jié)點(diǎn)進(jìn)行添加、刪除,甚至可以刪除樹的幾個(gè)部分,還可以重新排列樹和添加新的分支;但是,由于DOM構(gòu)建整個(gè)文檔駐留內(nèi)存的樹,如果文檔很大,就會要求有極大的內(nèi)存,這對于一般內(nèi)存不大的嵌入式設(shè)備是個(gè)挑戰(zhàn)。另外,DOM構(gòu)建整個(gè)文檔的每個(gè)節(jié)點(diǎn)和元素,如果用戶關(guān)心的只是其中的一部分,那么
圖4組件創(chuàng)建步驟圖5Konqueror/embedded的構(gòu)成將會引起資源的浪費(fèi);同時(shí),DOM是在用戶獲取控制權(quán)之前加載整個(gè)文檔的,如果文檔很大,將產(chǎn)生明顯的延遲。Konqueror/embedded中,采用DOM技術(shù)來解析HTML/XML的最大優(yōu)點(diǎn)在于,DOM會自動地保存已經(jīng)解析過的文檔,而不必要在用戶希望瀏覽歷史的時(shí)候再重新解析文檔。
Konqueror/embedded中采用的是DOM2級規(guī)范,分為DOM2 Core和DOM2 HTML。相對于DOM Level1,DOM2增加了對XML文檔處理的一些接口和方法:
◆ 視圖(view),提供視圖與文檔的聯(lián)系;
◆ 樣式表(style sheet),提供訪問和修改樣式表的方法;
◆ 層疊樣式表(CSS2),提供CSS2兼容的方法;
◆ 事件(events),提供各種事件的接口;
◆ 文檔遍歷(document traversal),提供遍歷文檔層次的接口;
◆ 文檔范圍(document range),提供分割文檔范圍的接口。
4在MC9328MX1上的應(yīng)用
41Konqueror/embedded的移植
筆者在自行設(shè)計(jì)的基于Motorola Dragonball MC9328MX1芯片的開發(fā)板上成功移植了Konqueror/embedded。該開發(fā)板上運(yùn)行嵌入式Linux,并以Qt/embedded2.3.7作為圖形引擎庫,上層運(yùn)行Qtopia1.6。Konqueror/embedded是基于Qt的,并將依賴于Kde部分進(jìn)行了簡化和包含,因此,移植Konqueror/embedded到該開發(fā)板是完全可能的。
Konqueror/embedded提供了幾十種編譯選項(xiàng),可以通過增減編譯選項(xiàng)來定制適合不同平臺,具有不同功能的Konqueror/embedded。
Konqueror/embedded的非核心組件的實(shí)現(xiàn)是在addons目錄下,例如如果需要播放Flash支持,必須在編譯選項(xiàng)中加入--enable-add-ons=kflashpart。在該部件中,默認(rèn)是將聲音關(guān)閉的,可以通過修改代碼將聲音開關(guān)打開。
由于MC9328MX1芯片是基于ARM架構(gòu)的,所以移植的第一步是構(gòu)建合適的交叉編譯環(huán)境。筆者采用的是armlinuxg++編譯器。編譯過程與一般的Linux軟件編譯的過程相似;但是,將Konqueror/embedded編譯成功之后,單獨(dú)下載Konqueror/embedded的可執(zhí)行文件Konqueror到開發(fā)板上運(yùn)行將會出現(xiàn)致命的錯(cuò)誤。因?yàn)镵onqueror/embedded的運(yùn)行需要兩個(gè)主要文件——html4.css和charset,是分別關(guān)于樣式表解析和字體設(shè)置的。
42Konqueror/embedded的漢化
Konqueror/embedded的漢化可分為兩個(gè)部分:一個(gè)是Konqueror/embedded本身控制界面的漢化;另一個(gè)是Konqueror/embedded對中文網(wǎng)站的訪問支持。和其他基于Qt的應(yīng)用程序一樣,Konqueror/embedded中對所有用戶可見的文本使用;對所有文字形式的文本使用tr()。tr()將文本標(biāo)識出來,這樣利用Qt提供的翻譯工具將很容易把這些文本轉(zhuǎn)化成所需要的語言;同時(shí),Qt提供了兩個(gè)宏:QT_TR_NOOP()和QT_TRANSLATE_NOOP()。用它們標(biāo)示出文本,以便于被lupdate工具提取。具體操作步驟如下:
◆ 在需要翻譯源碼的XXX.pro中加入一項(xiàng):TRANSLATIONS=XXX.ts 。
◆ 運(yùn)行l(wèi)update XXX.pro,生成XXX.ts文件。該工具識別出tr()結(jié)構(gòu)和上面描述的QT_*_NOOP宏,產(chǎn)生.ts文件(通常每種語言一個(gè))。
◆ 運(yùn)行l(wèi)release XXX.pro將生成XXX.qm。這是一個(gè)沒有翻譯成其他語言的.qm文件(也可以用Qt Linguist生成),可以把它改名為 XXX_en.qm。
◆ 啟動Qt Linguist將XXX.ts文件導(dǎo)入,將需要翻譯的內(nèi)容翻譯成中文。翻譯完成之后,點(diǎn)擊File→Release,將文件保存為XXX_zh.qm。
◆ 翻譯文件保存之后,在程序源碼中需要構(gòu)建Qtranslator實(shí)例,利用Qtranslator將翻譯文件加載到圖形界面上。
在Konqueror/embedded中可以通過修改main.c中的這段代碼來實(shí)現(xiàn)UI的漢化:
QString qmFile= “XXX_zh.qm”
QTranslator *translator=new QTranslator (&app);
if (translator->load (qmFile))
app.installTranslator (translator);
else
delete translator;
為了讓Konqueror/embedded能夠?yàn)g覽中文網(wǎng)頁,需要理解Qt對字符編碼的處理。在Qt中采用Unicode編碼的方式來存儲、描述和運(yùn)用字符串。讓Konqueror/embedded支持中文頁面瀏覽實(shí)際上與讓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為了減小字符集體積和減小內(nèi)存消耗而定義的一種字符存儲格式。在Qt/embedded/Qtopia中,采用這種格式的字符集。
在Qt/embedded中,提供轉(zhuǎn)換QPF字體的工具——makeqpf。它是一個(gè)基于Qt/embedded的程序,編譯之后運(yùn)行在QVFB中。我們采用的是Qt/embedded2.3.7版本的makeqpf,運(yùn)行時(shí)需要先啟動QVFB,程序makeqpf會自動查找文件$QTDIR/lib/fonts/fontdir;所以,在此之前需要設(shè)置好QTDIR,告訴makeqpf所需要轉(zhuǎn)換的字符集的各種屬性。將MS Windows下的字符集simsun .ttc復(fù)制到$QTDIR/lib/fonts目錄下,改名為simsun .ttf,在文件fontdir中添加如下的一行:
字符集轉(zhuǎn)換完成之后,Konqueror/embedded中用來管理屬性的preference類會在重啟之后自動搜索系統(tǒng)可用字符類型,新的字體名稱將會出現(xiàn)在選項(xiàng)欄中,以供選擇。
5總結(jié)
作為一款全功能的嵌入式瀏覽器,Konqueror/embedded運(yùn)用了很多KDE程序設(shè)計(jì)的方法和思路。Kparts組件技術(shù)使得Konqueror/embedded具有良好的可擴(kuò)展性,以適應(yīng)不同用戶或不同場合的應(yīng)用;I/OSlave機(jī)制讓Konqueror/embedded能夠通過各種網(wǎng)絡(luò)協(xié)議透明地訪問網(wǎng)絡(luò)文件;而作為KHTML引擎的核心——DOM,使得Konqueror/embedded能夠正確地解析和渲染HTML/XML文件,并在DOM結(jié)構(gòu)樹上綁定ECAMScript引擎和CSS解析器?梢娫诮Y(jié)構(gòu)上,Konqueror/embedded和其他現(xiàn)代瀏覽器具有相似之處。Konqueror/embedded是基于Qt工具套件的,因此,Konqueror/embedded只能運(yùn)行在以Qt/embedded為基礎(chǔ)的嵌入式設(shè)備上或運(yùn)行Qt/X11的PC機(jī)上,這在一定程度上限制了它的廣泛應(yīng)用。但是,由于它實(shí)現(xiàn)了完整的瀏覽器功能,并且是完全免費(fèi)的,所以Konqueror/embedded仍然具有很強(qiáng)的吸引力,同時(shí)對于其他的嵌入式瀏覽器設(shè)計(jì),它所包含的很多設(shè)計(jì)思想是值得研究和借鑒的。
參考文獻(xiàn)

1David Faure. Kparts教程. IBM:developerWorks
2Nicholas Chase. DOM教程. IBM:developerWorks
3Doug Tidwell. XML教程. IBM:developerWorks
4孫勇. Konqueror/embedded之結(jié)構(gòu)分析,2001
5Trolltech Inc. Qt Reference Documentation 3.3.2.,2004
6Cary R.Wright W.Richard Stevens. TCP/IP詳解卷1:協(xié)議. 北京:機(jī)械工業(yè)出版社,2002
蔣文軍:碩士研究生,主要研究方向?yàn)榛谇度胧较到y(tǒng)的網(wǎng)絡(luò)解決方案,嵌入式GUI設(shè)計(jì)。張曉林:教授、博士生導(dǎo)師,主要研究方向?yàn)橥ㄐ排c信息系統(tǒng),嵌入式系統(tǒng),無人飛行器遙控遙測,集成電路設(shè)計(jì)。

  • 上一篇: 基于RTOS的面向?qū)ο蟮木幊谭椒?/a>
  • 下一篇: 人工神經(jīng)網(wǎng)絡(luò)在ARM平臺上的應(yīng)用
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1