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

注: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。

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

 

QWebFrame的RenderLayer种类

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

QWebElement遍历DOM树的实现依赖于类Element,遍历工作均由Element完成。

转载于:https://www.cnblogs.com/lotushy/archive/2012/03/05/qtwebkit-qt-api.html

QTWebkit中的webkit/qt/api文档相关推荐

  1. 浅析如何在Nancy中使用Swagger生成API文档

    原文:浅析如何在Nancy中使用Swagger生成API文档 前言 上一篇博客介绍了使用Nancy框架内部的方法来创建了一个简单到不能再简单的Document.但是还有许许多多的不足. 为了能稍微完善 ...

  2. Spring MVC中使用Swagger生成API文档和完整项目示例Demo,swagger-server-api(二十)

    一:Swagger介绍 Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目 实现了与SpingMVC框架的无缝集成功能,方便生成spring r ...

  3. 在MyEclipse中使用javadoc导出API文档详解

    本篇文档介绍如何在MyEclipse中导出javadoc(API)帮助文档,并且使用htmlhelp.exe和jd2chm.exe生成chm文档. 具体步骤如下: 打开MyEclipse,选中想要制作 ...

  4. java Spring Boot中使用Swagger2构建API文档

    1.添加Swagger2的依赖 在pom.xml中加入Swagger2的依赖 <dependency><groupId>io.springfox</groupId> ...

  5. 使用Android Studio的时候如何查看开发文档,API文档,doc文档,SDK文档

    有的时候,我们在Android开发中需要查看需要的一些类或包里面有什么方法,返回值,调用关系和继承关系等等.这个时候我们就可以使用SDK软件开发工具中的其中之一--API文档,来查一下. 那么,下面就 ...

  6. swagger api文档_带有Swagger的Spring Rest API –公开文档

    swagger api文档 创建API文档后,将其提供给涉众很重要. 在理想情况下,此发布的文档将足够灵活以解决任何最后的更改,并且易于分发(就成本以及完成此操作所需的时间而言). 为了使之成为可能, ...

  7. 关于深度学习框架Hamaa与Python API文档生成工具Sophon

    五月两场 | NVIDIA DLI 深度学习入门课程 5月19日/5月26日一天密集式学习  快速带你入门阅读全文> 正文共1988个字,预计阅读时间12分钟. 前言 最近三个月我主要花时间在造 ...

  8. Python 实现 Swagger yaml 格式 api 文档合并

    需求来源 公司业务系统中,API文档定义使用了Swagger,由于多人开发中每个人开发的节点不同,整体的业务过于复杂,维护一套完整的 API 文档十分繁重,且容易出现误修改,所以用 python 实现 ...

  9. JAVA API文档 中文版

    在学习Java过程中,学会阅读API文档有时候能帮助我们解决不少问题,API文档就像是字典,在我们需要时候可以很方便的进行查找,奈何很多小伙伴的英文可能不是很好,这里分享一个Java 的API文档的中 ...

最新文章

  1. [转]ASP.NET页面生命周期描述
  2. asp.net core 使用 AccessControlHelper 控制访问权限
  3. C++如何产生随机数
  4. java hdfs 指定用户目录_HDFS目录(文件 )权限管理
  5. MySQL导出的文件权限_mysql导出数据到文件权限问题
  6. 【机器学习】【计算机视觉】非常全面的图像数据集《Actions》
  7. 在线订餐系统php心得体会_基于php的网上订餐系统的设计与实现论文.doc
  8. PHP实现留言板功能
  9. 事件同时发生的相对性——思想实验推导狭义相对论(三)
  10. 鸿蒙无ROOT,厉害了!鸿蒙系统天然无root 从源头提升系统安全
  11. 双路服务器单路运行,什么叫双路服务器?与PC机、单路机有什么区别?
  12. mongoDB 注册成开启自启动项
  13. Axure 9 修改默认字体
  14. 计算机图形学第一次上机——中点线算法和中点圆算法
  15. BSC Web3生态深度研究
  16. lodop打印html包含图片,使用lodop.js打印控件打印table并分页等
  17. LoadRunner 自动登录163邮箱
  18. CCF NOI1107 成人礼
  19. 从计数器逻辑中揭秘神奇的HDL
  20. 【论文学习】《Practical Attacks on Voice Spoofing Countermeasures》

热门文章

  1. execv shell_exec系列函数(execl,execlp,execle,execv,execvp)使用
  2. php curl nginx post 空_【青藤云安全研究】绕过php的disable_functions(上篇)
  3. 山西专科学校计算机专业排名,河南单招计算机专业专科学校排名
  4. 防注入php 留言板代码,简单的 php 防注入代码
  5. matlab更改矩阵的值,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  6. 计算机基础知识 音频,计算机基础知识(总结+试题).pdf
  7. 空间组网(卫星组网)概述
  8. c++ linux 获取毫秒_Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  9. ArcGiS/ArcInfo/ArcEditor/ArcMap/ArcView的区别
  10. ArcEngine坐标操作那些事