QT中使用Webkit简单写出源代码案例分析

移动开发
QT中使用Webkit简单写出源代码案例分析是本文要介绍的内容,WebCore浏览器核心组件,可以看作为一个Http解析和显示的核心库,包括了对各个脚本的分布处理以及对UI的组织,来考哪详细内容。

QT中使用Webkit简单写出源代码案例分析是本文要介绍的内容,主要是来学习今日研究了一下Webkit,这个东西是什么东西这里就不做描述了,看不懂就不必往下看了。

这里是以Qt的代码分支为主进行的分析,复杂的分析个人也有,但是毕竟牵扯到一些机密问题,所以不便公开。(如图)

Webkit简单写出源代码分析

JaveScripeCore:执行JavaScrip的核心程序,里面包含了脚本解析器、分析器和执行程序。

WebCore:浏览器核心组件,可以看作为一个Http解析和显示的核心库,包括了对各个脚本的分布处理以及对UI的组织,包含了对基本GUI动作、事件相应、网络、数据IO、图形图像的编解码等的处理,是核心组件。

Other libraries:其他平台库的支持,例如:libsqlite、libpng、libjepg等等。

Platform:平台支持。

在这里以QT为分析案例

WebCore部分

WebCore\platform\qt:

ClipboardQT:实现了管理剪切板的包装

ContextMenuQt和ContextMenuItemQt:对于菜单信息的一个封装,里面没有GUI的图形支持。

CookieJarQt:调用webkit封装的cookitAPI实现对cookie的信息的管理

CursorQt:实现对于光标的封装,提供了多种状态的光标式样。

DragDataQt:用来临时存储UI部分拖拽的对象数据,在QT中需要QMImierData支持,在ARM上可以不做考虑实现。

DragImageQt:功能与上面相似,可以不进行支持。

FileChooserQt:用开打开一个本地文件用的功能,里面包含了对GUI的对话框的调用。

FileSystemQt:用于提供对文件的一些IO支持的函数。

KeyboardCodes.h:里面根据平台的不同定义了相关的键值

Localizations:提供不同平台下返回的一些特定需要的字符串,比如Download Image,都是以函数的形式得到

MenuEventProxy:无用文件,可能是以前版本的QT的支持,新版本没有用处。

MIMETypeRegistryQT:通过输入的MIME字符串返回自定义的MIME类型,仅仅是用到了对字符串的处理。

PasteboardQt:对于剪切板的封装,封装一些设置剪切板内容的工作

PlatformKeyboardEventQt:主要是2个关于平台相关的按键转换函数,需要移植

PlatformMouseEventQt:对于鼠标事件的封装

PlatformScreenQt:封装了关于得到窗口尺寸的函数,需要重写

PlatformScrollBarQt:对平台用的滚动条进行封装,不同的GUI引擎用到的滚动条接口不一,移植比较麻烦,需要结合上层代码重写

PlugInInfoStoreQt:插件管理器,可以考虑参考GTK的方案放弃支持

PopupMenuQt:对弹出式菜单的封装

QWebPopup:貌似实现了弹出式的菜单,里面的做法是用qcombobox开虚拟了一个菜单

RenderThemeQt:实现了UI部分绘图的工作,里面区分了各控件的种类然后进行绘制,需要移植,比较麻烦

ScreenQt:无用,没有编译

ScrollViewQt:一个必须要用的控件,实现了一些接口的封装,实现比较麻烦

SearchPopupMenuQt:无用,所有函数返回空即可

SharedTimerQt:一个计时器,QT用的是Qtimer进行封装

SoundQt:调用一个系统铃声的函数

SystemTimeQt:返回系统时间

TemporaryLinkStubs:QT和GTK都没有实现,可以忽略

ThreadingQt:主要是做了一些线程方面需要支持的封装,QT的和Gtk的实现的东西不大一样,大多没有用处,ms仅仅callOnMainThread函数需要实现

WheelEventQt:需要实现,目的不明

WidgetQt:对于窗口的一个封装,各个平台封装不一,可按照其中一个作为参考

WebCore\platform\text:

里面代码主要是对于基本字符的处理,个平台实现方式不一,webkit本身提供一套字符机制,可以沿用,也可以根据平台重载关键部分做一些修改,如QT的方式和mac的方式

WebCore\platform\network:

ResourceResponse.h:写了一个需要实现的派生类,但是在qt下没有实际意义,在mac和cf下有具体实现。

其余文件都是针对于Http服务而写的一些辅助类,由于没有整体架构概念,目前难以理解

WebCore\platform\graphics:

AffineTransformQt.cpp:对于平台基本图形几何变换用的类函数封装

ColorQt:封装Color属性的类

FloatPointQt:关于Float点属性类的一个包装

FloatRectQt:关于浮点数属性的矩形类包装

FontCacheQt:关于字体包装后的一个扩展实现,个平台封装的很简单,基本没实现

FontCustomPlatformData:对于内存字体的管理,除了mac意外其余几乎没有做实现,可参照qt的做法

FontQt:对于字体基本操作的封装

GraphicsContextQt:基本绘画的另外上层封装

IconQt:对Icon处理的类

ImageBufferQt:关于Image处理的几个函数,可能用于中间数据转换用

ImageDecoderQt:一个图片处理的接口类,实现比较复杂

ImageQt:一个图片的接口类,许多实现依靠外部实现,比较复杂

ImageSourceQt:在上述2个文件之上的又一个封装,也是实现了关于图片操作的细节

IntPointQt、IntRectQt、IntSizeQt:这3个类如同名字,仅仅是对于数据结构类的一种封装

PathQt:对于QPainterPath的一个封装,其他平台ms没有

SimpleFontData:对于字符之上的另一个封装, QT没有实现功能,其他平台有实现

Webkit部分

许多Webcore部分的许多扩展是通过外部的Webkit中的代码加以实现,还有需要Webkit的对象是通过对Webcore已经原有的类进行集成,其中,比较重要是网络和数据IO部分,是通过Webkit的对象读取网络或者本地的数据资源,另外,其实现的方式是通过线程内的任务模式,有任务队列进行收发工作,如有另外的Page则通过另外的一个任务队列进行。

数据IO流程:

首先是上层调用的loader(***),里面就是URL或者是本地文件,对参数进行打包后一步一步,最终调到QWebNetworkInterface::addJob函数,在任务队列中增加新的任务,如果是本地文件,则用FileIO的形式进行读取,如果是Http的,则启动QHttp类的对象进行IO,直到取得数据为止

数据接收完成后会依次调到

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

其中就有对于数据分析和刷新GUI的工作。

所以可以看出,除了GUI需要移植意外,还有很多网络工作需要完成,QT版本是通过Http类进行Http方面的收发工作,Mac的流程与QT如同,需要考虑移植Http开源库进行收发。

补充:看过CURL的库,支持Http协议的手法和解析,但是CURL库需要的库我在这里列一下,对于CURL,笔者没有进行多余分析。

小结:QT中使用Webkit简单写出源代码案例分析的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

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-02-23 14:54:58

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:46:21

FileZilla

2011-02-23 14:39:27

FileZilla

2011-08-29 10:22:48

QtWebkit 模块HTML文档

2011-09-09 16:00:02

Android Web实例

2011-02-23 15:11:27

FileZilla

2011-02-23 14:26:28

FileZilla

2011-02-23 15:21:06

FileZilla

2011-02-23 13:47:33

FileZilla

2011-02-23 15:33:42

FileZilla

2011-02-23 15:26:01

FileZilla

2011-06-15 10:08:01

Qt CVS

2011-08-29 10:11:49

QTWindowsVisual Stud

2011-09-09 17:24:39

Qt Webkit模块

2011-08-29 11:25:29

QTWebKit鼠标
点赞
收藏

51CTO技术栈公众号