QTWebkit中的webkit/qt/api文档 - lotushy - 博客园
2012-04-11 11:58
519 查看
QTWebkit中的webkit/qt/api文档 - lotushy - 博客园
图1 qwebview,qwebpage,qwebframe三者关系
View是一个逻辑视图,真正的工作分别由page和frame完成。Page负责处理用户action、navigation和text editor等工作;frame则负责绘制工作。从webkit的角度来看,page与frame是一对多的关系,因为一个page下可以有frame tree,但通常是一对一的关系。从构造顺序来看,Page先于frame构造。
类qwebsetting是管理配置信息的,比如主页地址、代理、是否启用javascript、是否显示图片、是否支持插件等。
QWebView.cpp对类QWebView有较为详细的说明。感兴趣的话,大家可以看看。
QWebView提供了一个widget用于显示和编辑web文档。
QWebView是QtWebKit web browsing模块的主要widget组件。
常用API
load – load a url from local / remote
history() – 访问历史记录对象
settings() – 访问settings对象
url() – 读取当前url
title() – 读取当前title
triggerPageAction – 处理web action
event()
QWebPage类提供了可用于显示和编辑web文档的对象。
QWebPage负责web content,setting,history,navigation。在widget-less的环境下,QWebPage可以和QWebFrame协同工作,完成QWebView类似的功能。
Android自带的browser不支持弹出对话框,alert、confirm、prompt以log方式打印。可以自定义一个chromeclient实现这三个方法。
QWebPage::event(QEvent*)中处理的event非常多,详见下表。
注:d为QWebPagePrivate类型的对象。
通过阅读QWebPagePrivate的实现,可以发现,事件的处理均是由类EventHandler的handleXXXX实现的。类EventHandler是webkit的事件处理器,所以,若要改变webkit的事件处理规则可以修改该类。
实际上,Ekioh也是类似的事件处理方法。
EventHandler使用PlatformXXXXEvent来描述相关的XXXXEvent,所以,需要将QXXXXEvent转化为对应的PlatformXXXXEvent。
根据在Ekioh上的经验,一个事件由驱动抛出,交给window server系统。Window server系统会按照自己的定义,把事件封装,然后,交给browser应用。Browser应用则把window server的事件type转化成webkit需要的PlatformXXXXEvent,交给webkit处理。
Keydown事件的处理流程是需要注意的。它是先dispatch给Editor,然后再dispatch给DOM。Webkit中的解释是:”Run input method in advance of DOM event handling. This behaviour is necessary in order to match IE.”
WTF!!
如果要处理inputmethod,则修改EditorClientQT。
从设计模式上看,Page和Page Clients间应用的是策略模式。
Page Clients分别为:
l ChromeClient
l ContextMenuClient
l EditorClient
l DragClient
l InspectorClient
l DeviceOrientationClient – 编译选项DEVICE_ORIENTATION控制
l DeviceMotionClient - 编译选项CLIENT_BASED_GEOLOCATION控制
l GeolocationClient - 编译选项CLIENT_BASED_GEOLOCATION控制
qt的page clients的实现位于目录webkit/qt/WebCoreSupport。
遍历DOM树的方法
QWebFrame的RenderLayer种类
每一个QWebPage对象都有一个属于它的QWebSettings对象。该QWebSettings对象对该page进行配置。
访问特定元素的方法:
findAll()或findFirst()
遍历文档也可以用firstChild()和nextSibling()。
QWebElement遍历DOM树的实现依赖于类Element,遍历工作均由Element完成。
QTWebkit中的webkit/qt/api文档
QTWebkit中的webkit/qt/api文档
概述
该目录下的文件均以前前缀qweb开头,主要用于支持前端的实现。核心的类为:qwebview、qwebpage、qwebframe等三个类。这三者间的关系由图描述。(注:图来自QTWebkit自带文档)图1 qwebview,qwebpage,qwebframe三者关系
View是一个逻辑视图,真正的工作分别由page和frame完成。Page负责处理用户action、navigation和text editor等工作;frame则负责绘制工作。从webkit的角度来看,page与frame是一对多的关系,因为一个page下可以有frame tree,但通常是一对一的关系。从构造顺序来看,Page先于frame构造。
类qwebsetting是管理配置信息的,比如主页地址、代理、是否启用javascript、是否显示图片、是否支持插件等。
类详解
类图
QWebView
QWebView为QWidget的子类。QWidget是QT平台的PlatformWidget。QWebView.cpp对类QWebView有较为详细的说明。感兴趣的话,大家可以看看。
QWebView提供了一个widget用于显示和编辑web文档。
QWebView是QtWebKit web browsing模块的主要widget组件。
常用API
load – load a url from local / remote
history() – 访问历史记录对象
settings() – 访问settings对象
url() – 读取当前url
title() – 读取当前title
triggerPageAction – 处理web action
event()
QWebPage
QWebPage.cpp中对QWebPage做了较为详细的说明。感兴趣的话,大家可以看看。QWebPage类提供了可用于显示和编辑web文档的对象。
QWebPage负责web content,setting,history,navigation。在widget-less的环境下,QWebPage可以和QWebFrame协同工作,完成QWebView类似的功能。
NavigationType表
NavigationType |
NavigationTypeLinkClicked |
NavigationTypeFormSubmitted |
NavigationTypeBackOrForward |
NavigationTypeReload |
NavigationTypeFormResubmitted |
WebAction表
(方法QWebPage::triggerAction触发特定的action)WebAction | |
NoWebAction | 不做任何操作 |
OpenLink | 打开当前链接 |
OpenLinkInNewWindow | 在新window中打开当前链接 |
OpenFrameInNewWindow | 在新window中复制当前frame |
DownloadLinkToDisk | 保存当前link |
CopyLinkToClipboard | 拷贝当前link到剪切板 |
OpenImageInNewWindow | 在新window中打开image |
DownloadImageToDisk | 保存image到disk |
CopyImageToClipboard | 拷贝image到剪切板 |
CopyImageUrlToClipboard | 复制image的url到剪切板 |
Back | Navigate back |
Forward | Navigate forward |
Stop | 停止load当前页面 |
StopScheduledPageRefresh | 停止所有挂起页面的刷新或重定向 |
Reload | 重载当前页面 |
ReloadAndBypassCache | 重载当前页面,不使用本地cache |
Cut | 剪切 |
Copy | 复制 |
Paste | 粘贴 |
Undo | 撤消最近的一次编辑 |
Redo | Redo最近的一次编辑 |
MoveToNextChar | 移动光标到下一个字符 |
MoveToPreviousChar | 移动光标到上一个字符 |
MoveToNextWord | 移动光标到下一个词 |
MoveToPreviousWord | 移动光标到上一个词 |
MoveToNextLine | 移动光标到下一行 |
MoveToPreviousLine | 移动光标到上一行 |
MoveToStartOfLine | 移动光标到行的开始处 |
MoveToEndOfLine | 移动光标到行的结尾处 |
MoveToStartOfBlock | 移动光标到block的开始处 |
MoveToEndOfBlock | 移动光标到block的结尾处 |
MoveToStartOfDocument | 移动光标到文档的开始处 |
MoveToEndOfDocument | 移动光标到文档的结尾处 |
SelectNextChar | 选择下一个字符 |
SelectPreviousChar | |
SelectNextWord | |
SelectPreviousWord | |
SelectNextLine | |
SelectPreviousLine | |
SelectStartOfLine | |
SelectEndOfLine | |
SelectStartOfBlock | |
SelectEndOfBlock | |
SelectStartOfDocument | |
SelectEndOfDocument | |
DeleteStartOfWord | |
DeleteEndOfWord | |
SetTextDirectionDefault | |
SetTextDirectionLeftToRight | |
SetTextDirectionRightToLeft | |
ToggleBold | Bold和normal间切换 |
ToggleItalic | Italic和normal间切换 |
ToggleUnderline | Underline和normal间切换 |
InspectElement | |
InsertParagraphSeparator | 插入一个新的段落 |
InsertLineSeparator | 插入一个新行 |
SelectAll | 选择全部内容 |
PasteAndMatchStyle | 从剪切板中粘贴内容并使用当前样式 |
RemoveFormat | 删除格式和样式 |
ToggleStrikethrough | Strike和normal间切换 |
ToggleSubscript | Subscript和baseline间切换 |
ToggleSuperscript | Superscript和baseline间切换 |
InsertUnorderedList | |
InsertOrderedList | |
Indent | 给当前选择的block增加一个Intent |
Outdent | 给当前选择的block减一个Intent |
AlignCenter | 内容中间对齐 |
AlignJustified | 内容两边对齐 |
AlignLeft | 内容左对齐 |
AlignRight | 内容右对齐 |
WebWindowType表
WebWindowType | |
WebBrowserWindow | 规则的web browser window |
WebModalDialog | 行为和modal dialog一样 |
Alert、Confirm和Prompt
Javascript中的alert、confirm、prompt三个弹出对话框,通常由chromeclient来实现。在qtwebkit中,这三个弹出对话框的实现放在了QWebPage中。三个实现均使用了QMessageBox类。宏QT_NO_MESSAGEBOX需要关闭。或者说,只有qt支持MessageBox才可以。Android自带的browser不支持弹出对话框,alert、confirm、prompt以log方式打印。可以自定义一个chromeclient实现这三个方法。
Event
QT中的event由类QEvent定义。其子类QKeyEvent、QMouseEvent、QTouchEvent为主要的三类事件。在QTWebkit中,QWebPage::event(QEvent*)为事件分发方法。它定义了统一的分发接口。具体的分发细则由私有类QWebPagePrivate实现。QWebPage::event(QEvent*)中处理的event非常多,详见下表。
Event Type | |
Timer | d->timerEvent |
MouseMove | d->mouseMoveEvent |
MouseButtonPress | d->mousePressEvent |
MouseButtonDblClick | d->mouseDoubleClickEvent |
MouseButtonRelease | d->mouseReleaseEvent |
ContextMenu | d->contextMenuEvent |
Wheel | d->wheelEvent |
KeyPress | d->keyPressEvent |
KeyRelease | d->keyReleaseEvent |
FocusIn | d->focusInEvent |
FocusOut | d->focusOutEvent |
DragEnter | d->dragEnterEvent |
DragLeave | d->dragLeaveEvent |
DragMove | d->dragMoveEvent |
Drop | d->dropEvent |
InputMethod | d->inputMethodEvent |
TouchBegin | d->touchEvent |
TouchUpdate | d->touchEvent |
TouchEnd | d->touchEvent |
通过阅读QWebPagePrivate的实现,可以发现,事件的处理均是由类EventHandler的handleXXXX实现的。类EventHandler是webkit的事件处理器,所以,若要改变webkit的事件处理规则可以修改该类。
实际上,Ekioh也是类似的事件处理方法。
EventHandler使用PlatformXXXXEvent来描述相关的XXXXEvent,所以,需要将QXXXXEvent转化为对应的PlatformXXXXEvent。
根据在Ekioh上的经验,一个事件由驱动抛出,交给window server系统。Window server系统会按照自己的定义,把事件封装,然后,交给browser应用。Browser应用则把window server的事件type转化成webkit需要的PlatformXXXXEvent,交给webkit处理。
Keydown事件的处理流程是需要注意的。它是先dispatch给Editor,然后再dispatch给DOM。Webkit中的解释是:”Run input method in advance of DOM event handling. This behaviour is necessary in order to match IE.”
WTF!!
如果要处理inputmethod,则修改EditorClientQT。
PageClients
在ekioh中好像还没有这个类。Page需要的clients通常直接以构造参数的方式传给Page。从设计模式上看,Page和Page Clients间应用的是策略模式。
Page Clients分别为:
l ChromeClient
l ContextMenuClient
l EditorClient
l DragClient
l InspectorClient
l DeviceOrientationClient – 编译选项DEVICE_ORIENTATION控制
l DeviceMotionClient - 编译选项CLIENT_BASED_GEOLOCATION控制
l GeolocationClient - 编译选项CLIENT_BASED_GEOLOCATION控制
qt的page clients的实现位于目录webkit/qt/WebCoreSupport。
QWebFrame
QWebFrame代表web page中的一个frame。一个web page至少包含一个main frame。其它frame可以由<frame>或<iframe>标签创建。遍历DOM树的方法
DOM树遍历与操作 | |
documentElement | 返回DOM树的根节点 |
findAllElements, findFirstElement | 返回满足条件的元素 |
load,setHtml, setContent | |
toHtml, toPlainText | |
frameName | |
title, url, baseUrl, icon | |
RenderLayer | |
ContentsLayer | |
ScrollBarLayer | |
PanIconLayer | |
AllLayers |
QWebHistory
QWebSettings
QWebSettings类用于存储QWebPage和QWebFrame使用的配置信息。每一个QWebPage对象都有一个属于它的QWebSettings对象。该QWebSettings对象对该page进行配置。
QWebElement
QWebElement类提供了便捷访问DOM元素的方法。DOM树的根是document元素,可以使用方法QWebFrame::documentElement()访问。访问特定元素的方法:
findAll()或findFirst()
遍历文档也可以用firstChild()和nextSibling()。
DOM接口 | |
findAll, findFirst | 访问特定元素(由CSS选择器指定) |
firstChild, nextSibling, lastChild previousSibling | |
attribute, setAttribute | 查询或修改元素 |
hasAttribute, hasAttributeNS, | |
removeAttribute | |
hasFocus, setFocus | |
tagName | |
parent |
相关文章推荐
- QTWebkit中的webkit/qt/api文档
- Qt 之路 (06)—API文档的使用
- QT之GUI学习笔记(三)——API文档的使用
- 利用新浪api获取ip归属地 - QtSharp - 博客园
- android API for webkit
- API方式(Foxpro中HtmlHelp)调用chm帮助文档(不用foxtools.fll获取窗口句柄)
- 技术书或API文档
- 小程序文档整理之 -- API(媒体)
- 使用Wisdom RESTClient自动化测试RESTful API和生成REST API文档
- Twitter开放API文档 附帶測試鏈接地址
- TC官方文档翻译03----可扩充字符串API(Tokyo Cabinet/Tokyo Tyarnt 文档系列)
- Android2.2 API中文文档——View Android View的xml属性
- 在下载jar包时,要有三个包,分别为使用的把class、查看文档的api、查看源代码的资源包
- [转]HighCharts 详细使用及API文档说明
- Qt帮助文档无法打开的解决方案
- Qt Port of WebKit ¶
- Cut Down QtWebkit Library
- Sun完整发布Java API文档中文版
- 详解Node.js API系列C/C++ Addons(1) API文档
- Qtwebkit配置,设置交叉编译环境