偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

QT中使用Webkit簡(jiǎn)單寫(xiě)出源代碼案例分析

移動(dòng)開(kāi)發(fā)
QT中使用Webkit簡(jiǎn)單寫(xiě)出源代碼案例分析是本文要介紹的內(nèi)容,WebCore瀏覽器核心組件,可以看作為一個(gè)Http解析和顯示的核心庫(kù),包括了對(duì)各個(gè)腳本的分布處理以及對(duì)UI的組織,來(lái)考哪詳細(xì)內(nèi)容。

QT中使用Webkit簡(jiǎn)單寫(xiě)出源代碼案例分析是本文要介紹的內(nèi)容,主要是來(lái)學(xué)習(xí)今日研究了一下Webkit,這個(gè)東西是什么東西這里就不做描述了,看不懂就不必往下看了。

這里是以Qt的代碼分支為主進(jìn)行的分析,復(fù)雜的分析個(gè)人也有,但是畢竟?fàn)砍兜揭恍C(jī)密問(wèn)題,所以不便公開(kāi)。(如圖)

Webkit簡(jiǎn)單寫(xiě)出源代碼分析

JaveScripeCore:執(zhí)行JavaScrip的核心程序,里面包含了腳本解析器、分析器和執(zhí)行程序。

WebCore:瀏覽器核心組件,可以看作為一個(gè)Http解析和顯示的核心庫(kù),包括了對(duì)各個(gè)腳本的分布處理以及對(duì)UI的組織,包含了對(duì)基本GUI動(dòng)作、事件相應(yīng)、網(wǎng)絡(luò)、數(shù)據(jù)IO、圖形圖像的編解碼等的處理,是核心組件。

Other libraries:其他平臺(tái)庫(kù)的支持,例如:libsqlite、libpng、libjepg等等。

Platform:平臺(tái)支持。

在這里以QT為分析案例

WebCore部分

WebCore\platform\qt:

ClipboardQT:實(shí)現(xiàn)了管理剪切板的包裝

ContextMenuQt和ContextMenuItemQt:對(duì)于菜單信息的一個(gè)封裝,里面沒(méi)有GUI的圖形支持。

CookieJarQt:調(diào)用webkit封裝的cookitAPI實(shí)現(xiàn)對(duì)cookie的信息的管理

CursorQt:實(shí)現(xiàn)對(duì)于光標(biāo)的封裝,提供了多種狀態(tài)的光標(biāo)式樣。

DragDataQt:用來(lái)臨時(shí)存儲(chǔ)UI部分拖拽的對(duì)象數(shù)據(jù),在QT中需要QMImierData支持,在A(yíng)RM上可以不做考慮實(shí)現(xiàn)。

DragImageQt:功能與上面相似,可以不進(jìn)行支持。

FileChooserQt:用開(kāi)打開(kāi)一個(gè)本地文件用的功能,里面包含了對(duì)GUI的對(duì)話(huà)框的調(diào)用。

FileSystemQt:用于提供對(duì)文件的一些IO支持的函數(shù)。

KeyboardCodes.h:里面根據(jù)平臺(tái)的不同定義了相關(guān)的鍵值

Localizations:提供不同平臺(tái)下返回的一些特定需要的字符串,比如Download Image,都是以函數(shù)的形式得到

MenuEventProxy:無(wú)用文件,可能是以前版本的QT的支持,新版本沒(méi)有用處。

MIMETypeRegistryQT:通過(guò)輸入的MIME字符串返回自定義的MIME類(lèi)型,僅僅是用到了對(duì)字符串的處理。

PasteboardQt:對(duì)于剪切板的封裝,封裝一些設(shè)置剪切板內(nèi)容的工作

PlatformKeyboardEventQt:主要是2個(gè)關(guān)于平臺(tái)相關(guān)的按鍵轉(zhuǎn)換函數(shù),需要移植

PlatformMouseEventQt:對(duì)于鼠標(biāo)事件的封裝

PlatformScreenQt:封裝了關(guān)于得到窗口尺寸的函數(shù),需要重寫(xiě)

PlatformScrollBarQt:對(duì)平臺(tái)用的滾動(dòng)條進(jìn)行封裝,不同的GUI引擎用到的滾動(dòng)條接口不一,移植比較麻煩,需要結(jié)合上層代碼重寫(xiě)

PlugInInfoStoreQt:插件管理器,可以考慮參考GTK的方案放棄支持

PopupMenuQt:對(duì)彈出式菜單的封裝

QWebPopup:貌似實(shí)現(xiàn)了彈出式的菜單,里面的做法是用qcombobox開(kāi)虛擬了一個(gè)菜單

RenderThemeQt:實(shí)現(xiàn)了UI部分繪圖的工作,里面區(qū)分了各控件的種類(lèi)然后進(jìn)行繪制,需要移植,比較麻煩

ScreenQt:無(wú)用,沒(méi)有編譯

ScrollViewQt:一個(gè)必須要用的控件,實(shí)現(xiàn)了一些接口的封裝,實(shí)現(xiàn)比較麻煩

SearchPopupMenuQt:無(wú)用,所有函數(shù)返回空即可

SharedTimerQt:一個(gè)計(jì)時(shí)器,QT用的是Qtimer進(jìn)行封裝

SoundQt:調(diào)用一個(gè)系統(tǒng)鈴聲的函數(shù)

SystemTimeQt:返回系統(tǒng)時(shí)間

TemporaryLinkStubs:QT和GTK都沒(méi)有實(shí)現(xiàn),可以忽略

ThreadingQt:主要是做了一些線(xiàn)程方面需要支持的封裝,QT的和Gtk的實(shí)現(xiàn)的東西不大一樣,大多沒(méi)有用處,ms僅僅callOnMainThread函數(shù)需要實(shí)現(xiàn)

WheelEventQt:需要實(shí)現(xiàn),目的不明

WidgetQt:對(duì)于窗口的一個(gè)封裝,各個(gè)平臺(tái)封裝不一,可按照其中一個(gè)作為參考

WebCore\platform\text:

里面代碼主要是對(duì)于基本字符的處理,個(gè)平臺(tái)實(shí)現(xiàn)方式不一,webkit本身提供一套字符機(jī)制,可以沿用,也可以根據(jù)平臺(tái)重載關(guān)鍵部分做一些修改,如QT的方式和mac的方式

WebCore\platform\network:

ResourceResponse.h:寫(xiě)了一個(gè)需要實(shí)現(xiàn)的派生類(lèi),但是在qt下沒(méi)有實(shí)際意義,在mac和cf下有具體實(shí)現(xiàn)。

其余文件都是針對(duì)于Http服務(wù)而寫(xiě)的一些輔助類(lèi),由于沒(méi)有整體架構(gòu)概念,目前難以理解

WebCore\platform\graphics:

AffineTransformQt.cpp:對(duì)于平臺(tái)基本圖形幾何變換用的類(lèi)函數(shù)封裝

ColorQt:封裝Color屬性的類(lèi)

FloatPointQt:關(guān)于Float點(diǎn)屬性類(lèi)的一個(gè)包裝

FloatRectQt:關(guān)于浮點(diǎn)數(shù)屬性的矩形類(lèi)包裝

FontCacheQt:關(guān)于字體包裝后的一個(gè)擴(kuò)展實(shí)現(xiàn),個(gè)平臺(tái)封裝的很簡(jiǎn)單,基本沒(méi)實(shí)現(xiàn)

FontCustomPlatformData:對(duì)于內(nèi)存字體的管理,除了mac意外其余幾乎沒(méi)有做實(shí)現(xiàn),可參照qt的做法

FontQt:對(duì)于字體基本操作的封裝

GraphicsContextQt:基本繪畫(huà)的另外上層封裝

IconQt:對(duì)Icon處理的類(lèi)

ImageBufferQt:關(guān)于Image處理的幾個(gè)函數(shù),可能用于中間數(shù)據(jù)轉(zhuǎn)換用

ImageDecoderQt:一個(gè)圖片處理的接口類(lèi),實(shí)現(xiàn)比較復(fù)雜

ImageQt:一個(gè)圖片的接口類(lèi),許多實(shí)現(xiàn)依靠外部實(shí)現(xiàn),比較復(fù)雜

ImageSourceQt:在上述2個(gè)文件之上的又一個(gè)封裝,也是實(shí)現(xiàn)了關(guān)于圖片操作的細(xì)節(jié)

IntPointQt、IntRectQt、IntSizeQt:這3個(gè)類(lèi)如同名字,僅僅是對(duì)于數(shù)據(jù)結(jié)構(gòu)類(lèi)的一種封裝

PathQt:對(duì)于QPainterPath的一個(gè)封裝,其他平臺(tái)ms沒(méi)有

SimpleFontData:對(duì)于字符之上的另一個(gè)封裝, QT沒(méi)有實(shí)現(xiàn)功能,其他平臺(tái)有實(shí)現(xiàn)

Webkit部分

許多Webcore部分的許多擴(kuò)展是通過(guò)外部的Webkit中的代碼加以實(shí)現(xiàn),還有需要Webkit的對(duì)象是通過(guò)對(duì)Webcore已經(jīng)原有的類(lèi)進(jìn)行集成,其中,比較重要是網(wǎng)絡(luò)和數(shù)據(jù)IO部分,是通過(guò)Webkit的對(duì)象讀取網(wǎng)絡(luò)或者本地的數(shù)據(jù)資源,另外,其實(shí)現(xiàn)的方式是通過(guò)線(xiàn)程內(nèi)的任務(wù)模式,有任務(wù)隊(duì)列進(jìn)行收發(fā)工作,如有另外的Page則通過(guò)另外的一個(gè)任務(wù)隊(duì)列進(jìn)行。

數(shù)據(jù)IO流程:

首先是上層調(diào)用的loader(***),里面就是URL或者是本地文件,對(duì)參數(shù)進(jìn)行打包后一步一步,最終調(diào)到QWebNetworkInterface::addJob函數(shù),在任務(wù)隊(duì)列中增加新的任務(wù),如果是本地文件,則用FileIO的形式進(jìn)行讀取,如果是Http的,則啟動(dòng)QHttp類(lèi)的對(duì)象進(jìn)行IO,直到取得數(shù)據(jù)為止

數(shù)據(jù)接收完成后會(huì)依次調(diào)到

  1. MainResourceLoader::didFinishLoading  
  2. FrameLoader::finishedLoading  
  3. DocumentLoader::finishedLoading 

其中就有對(duì)于數(shù)據(jù)分析和刷新GUI的工作。

所以可以看出,除了GUI需要移植意外,還有很多網(wǎng)絡(luò)工作需要完成,QT版本是通過(guò)Http類(lèi)進(jìn)行Http方面的收發(fā)工作,Mac的流程與QT如同,需要考慮移植Http開(kāi)源庫(kù)進(jìn)行收發(fā)。

補(bǔ)充:看過(guò)CURL的庫(kù),支持Http協(xié)議的手法和解析,但是CURL庫(kù)需要的庫(kù)我在這里列一下,對(duì)于CURL,筆者沒(méi)有進(jìn)行多余分析。

小結(jié):QT中使用Webkit簡(jiǎn)單寫(xiě)出源代碼案例分析的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-09-01 14:04:45

QT Webkit插件

2011-09-01 15:22:16

Qt WebKitWebKit

2011-10-13 14:26:12

Qt WebKitWebKit

2011-06-14 11:48:38

Webkit QT

2011-08-29 10:22:48

QtWebkit 模塊HTML文檔

2011-09-09 16:00:02

Android Web實(shí)例

2011-02-23 14:46:21

FileZilla

2011-02-23 14:54:58

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:39:27

FileZilla

2011-06-15 10:08:01

Qt CVS

2011-02-23 15:11:27

FileZilla

2011-02-23 15:33:42

FileZilla

2011-02-23 14:26:28

FileZilla

2011-02-23 15:26:01

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:21:06

FileZilla

2011-09-09 17:24:39

Qt Webkit模塊

2011-08-29 10:11:49

QTWindowsVisual Stud

2011-08-29 11:25:29

QTWebKit鼠標(biāo)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)