Qt开发所需的基本知识

一、QT webkit简介

1.Qt

Qt(发音同 cute)是一个跨平台C++应用程式开发框架,有时又被称为C++部件工具箱。Qt被用在KDE桌面环境、OperaGoogle EarthSkypeAdobe
Photoshop Album
VirtualBox的开发中。它是挪威Qt
Software
 的产品,2008年6月17日被芬兰诺基亚(Nokia)公司收购,以增强该公司在跨平台软件研发方面的实力。

2.Webkit

WebKitMac
OS X
 v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。同时,WebKit也是Mac OS XSafari网页浏览器的基础。WebKit是一个开源项目,主要由KDEKHTML修改而来并且包含了一些来自苹果公司的一些组件。

传统上,WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTMLKJS。不过,随着JavaScript引擎的独立性越来越强,现在WebKit和WebCore已经基本上混用不分(例如Google
Chrome
Maxthon 3采用V8引擎,却仍然宣称自己是WebKit内核)。

3.Qt webkit

简单的说,Qt webkit就是Qt对Apple公司webkit的支持而开发的库,主要包括以下几个类





































QWebDatabase

Access to HTML 5 databases created with JavaScript

QWebFrame

Represents a frame in a web page

QWebHistory

Represents the history of a QWebPage

QWebHistoryInterface

Interface to implement link history

QWebHistoryItem

Represents one item in the history of a QWebPage

QWebHitTestResult

Information about the web page content after a hit
test

QWebPage

Object to view and edit web documents

QWebPluginFactory

Creates plugins to be embedded into web pages

QWebSecurityOrigin

Defines a security boundary for web sites

QWebSettings

Object to store the settings used by QWebPage and
QWebFrame

QWebView

Widget that is used to view and edit web documents

二、QWebView Class介绍

QWebView类是Qt
webkit模块中最常用到的类之一。它用来创建一个可以view以及edit文档的widget。也就是说,我们可以通过QWebView来查看和编辑网页(编辑网页视具体情况实现)。同时,QWebView可以包含QWebPage和QWebFrame的对象,它们三者的关系可以表示为:

QWebPage和QWebFrame将会在后面介绍。

三、QWebPage Class介绍

QWebPage类和QWebView类一样,都用于查看和编辑网页,不同的是,从两者的包含关系上我们可以知道,QWebView可以用于打开多个网页,而里面具体的网页对象就是QWebPage。QWebPage通过mainframe()方法可以得到More QWebView-like
functions,如load(), setUrl() 和 setHtml()。

四、QWebFrame Class介绍

QWebFrame可以算是QWebPage的元对象了,每一个QWebPage至少有一个QWebFrame,它被称作QWebPage的mainframe,通过QWebPage::
mainframe()方法得到。换言之,QWebFrame依附QWebPage存在。通过调用QWebFrame的page()方法返回它所在的QWebPage对象。而zoomFactor()方法则实现了网页内容的缩放。

五、QWebDataBase Class介绍

QWebDataBase提供了对基于JavaScript创建的HTML 5数据库。新一代的HTML 5标准也提供对基于javaScript
SQL数据库访问的支持。QWebDataBase就是这些数据库的C++接口。关于HTML 5的详情,可以参见HTML
5 Draft Standard
.

六、QWebHistory Class介绍

顾名思义,QWebHistory用来表示QWebPage的历史记录。通过创建相应的Items实现前进、后退等操作。与之相关的类为QWebHistoryItem和QWebHistoryInterface.

七、QWebHistoryInterface Class介绍

QWebHistory用来表示QWebPage的历史记录,不过历史记录却是通过QWebHistoryInterface记录下来的。当调用addHistoryEntry(const QString & url)方法后,访问的网页地址就被记录到visited
pages里了。

八、QWebHistoryItem Class介绍

QWebHistoryItem类用于创建QWebHistory的Items. 加上QWebHistoryInterface类,实现了浏览器的历史记录功能。

九、QWebHitTestResult class介绍

首先要明白HitTest的含义。HitTest通常被称为碰撞测试或相交测试,用于测试两个物体或目标(对象)间是否重叠和相交。可以用来判断网页内容是否用选中、是否能编辑、是否有超链接等等。

十、QWebPluginFactory Class介绍

QWebPluginFactory是QWebPage的插件工厂,用于创建嵌入web
pages的插件。QWebPluginFactory使用的前提是在QWebSettings中Plugins被设定为enabled。

插件可以用于实现对多媒体类型(MIME)数据的应用。比如在网页中显示pdf文档或flash动画。不过,现阶段Qt
WebKit还不支持对flash的应用,如果想要在Qt
WebKit中使用flash,可以参考使用一些开源的flash库,比如gnash。想更进一步了解MIME和gnash,请点击MIME数据类型和gnash应用。

十一、QWebSecurityOrigin class介绍

QWebSecurityOrigin用于定义网站的安全边界(Security boundary),它包含了一个网站host name,
scheme, 和port number,用于阻止非法权限对网站数据的访问。

十二、QWebSettings Class介绍

用于储存QWebPage和QWebFrame的设置。每一个QWebPage都有它的QWebSettings对象,用于对网页设置信息的存储。如果一个setting没有被配置,那么它将通过QWebSettings::globalSettings()寻找一个global
settings.网页的属性通过枚举类型enum QWebSettings::WebAttribute定义.

一.首先,让我们展示一幅QWebView的网页效果图:

想要实现上面的效果很简单,你只需要完成三个步骤

1.建立一个QWebView对象,QWebView *view = new QWebView(parent);其中parent为父类.如果想要QWebView为top window,可以设置parent = 0
2.调用load或setUrl方法设置要显示的网页.注意网页的格式以http://开头
3.调用show方法显示QWebView
 
完整的代码为:
QWebView *view = new QWebView(parent);        //步骤1
view->load(QUrl("http://qtsoftware.com/"));   //步骤2
view->show();  //步骤3
 

二.QWebView除了用load方法设定网页路径外,也可以使用setHtml方法加载html格式的网页,这里我们以加载google地图插件为例.最后的效果图为:

1.第一步,我们通过google地图获取插件的代码。进入google地图页面,点击链接,获取代码

 

 
2.获取到得代码为:
<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"
src="http://ditu.google.cn/maps?hl=zh-CN&amp;q=%E5%9C%B0%E5%9B%BE&amp;ie=UTF8&amp;
brcurrent=3,0x31508e64e5c642c1:0x951daa7c349f366f,0%3B5,0,0&amp;ll=38.005263,115.357367&amp;
spn=15.390188,22.535491&amp;output=embed"></iframe>
<br /><small><a href="http://ditu.google.cn/maps?hl=zh-CN&amp;q=%E5%9C%B0%E5%9B%BE&amp;
ie=UTF8&amp;brcurrent=3,0x31508e64e5c642c1:0x951daa7c349f366f,0%3B5,0,0&amp;
ll=38.005263,115.357367&amp;spn=15.390188,22.535491&amp;source=embed" style="color:#0000FF;text-align:left">查看大图</a>
</small>
我们可以删去br、small和a标记,最后在代码前后添加<html></html>标记
将文件保存为*.html(注:删除的部分为屏蔽google地图的右键效果,可以保留)
 
3.调用QWebView的setHtml方法设定上述文件的路径,然后用show方法显示google地图
 
================================================================================================

关于QWebView的信号与槽,下面列出:

Public Slots


  • void back ()

  • void forward ()

  • void print ( QPrinter
    printer ) const

  • void reload ()

  • void stop ()

  • 19 public slots inherited from QWidget

  • 1 public slot inherited from QObject

  • void iconChanged ()

  • void linkClicked ( const QUrl
    url )

  • void loadFinished (
    bool ok )

  • void loadProgress (
    int progress )

  • void loadStarted ()

  • void selectionChanged ()

  • void statusBarMessage ( const QString
    text )

  • void titleChanged ( const QString
    title )

  • void urlChanged ( const QUrl
    url )

  • 1 signal inherited from QWidget

  • 1 signal inherited from QObject

Signals

1.loadStarted、loadFinished和loadProgress信号介绍

loadStarted信号当有新的web page请求时发出。而我们关注更多的是loadProgress信号。loadProgress信号在load web page的一个元素成功时发出。这里的元素指代image、text、script对象。loadProgress的value表明了网页load的进度,范围从0-100。我们可以看出,QWebView封装了获得load进度值的计算方法。我们可以连接信号,对进度条赋值
connect(webView, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
其中setProgress方法需要自己定义。
loadFinished信号在web page load完成后发送。

2.iconChanged、selectionChanged、titleChanged和urlChanged信号介绍

当web page显示网页的icon、selected text、title或url改变时发送

3.back、forward、reload、print、stop槽介绍

back、forward对应QWebPage的后退与前进操作,相当于webView->page()->triggerPageAction(QWebPage::Back);和
webView->page()->triggerPageAction(QWebPage::Forward);
其中QWebView通过调用page方法返回current page. QWebPage::Back和QWebPage::Forward在QWebPage::WebAction中定义
 
Reload与stop槽为重载与停止load web page
 
Print槽用于将main frame通过QPrinter paints出来。这里可以更进一步了解QWebView、QWebPage与QWebFrame三者的层次结构

4.linkClicked与statusBarMessage信号

首先,linkClicked信号能够发送的前提是对应的QWebPage::linkDelegationPolicy被设定为允许链接
而statusBarMessage信号发生在status text改变时
 
 
========================================
 

本篇为QWebView应用的扩展,除了之前的QWebView相关知识,还涉及到QPainter及QPaintEvent的应用。本篇实现的效果为google
map的夜视(night-mode)功能,如下图

实现night-mode的原理涉及到反色等知识,不过编写起来却十分简单。你可以尝试打开“画图”等图片编辑工具,然后选中反色,得到的效果即我们现在要完成的。

在QWebView的反色处理上,我们通过重写paintEvent函数实现:

1.首先调用QWebView的paintEvent方法将我们需要显示的图片(内容)paint好

2.QPaint提供了反色的接口setCompositionMode。它是一系列图像构成的接口,我们选择QPainter::CompositionMode_Difference实现整个画面的反色效果

3.设置好反色效果后,调用fillRect方法填充所需变化的区域。

完整的代码为(paintEvent,省略其他变量定义)

void webViewClass::paintEvent(QPaintEvent *event)

{

QWebView::paintEvent(event);

if(isNightMode)

{

QPainter p(this);

//p.setBackgroundMode(Qt::OpaqueMode);

p.setCompositionMode(QPainter::CompositionMode_Difference);

p.fillRect(event->rect(), Qt::white);

}

}

其中在fillRect中,因为CompositionMode_Difference模式指的是一种异或(xor)运算,因为white的颜色是全1,所以和原有图像的运算结果刚好是按位取反的功能,做到了反色效果。

时间: 2024-10-26 23:30:09

Qt开发所需的基本知识的相关文章

QT开发(六十三)——QT事件机制分析

QT开发(六十三)--QT事件机制分析 一.事件机制 事件是由系统或者QT平台本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事件则是由系统自动发出,如计时器事件. 事件的出现,使得程序代码不会按照原始的线性顺序执行.线性顺序的程序设计风格不适合处理复杂的用户交互,如用户交互过程中,用户点击"打开文件"将开始执行打开文件的操作,用户点击"保存文件"将开始执

QT开发(五)——窗口组件和窗口类型

QT开发(五)--窗口组件和窗口类型 一.窗口组件 图形用户界面由不同的窗口和窗口组件构成,<QtGui>头文件包含窗口组件,对应QT中的GUI模块,QT以组件对象的方式构建GUI. 组件的类型: A.容器类(父组件)用来包含其他的界面组件 B.功能类(子组件)用于实现特定的交互功能 QT中没有父组件的顶级组件叫窗口. QWidget是容器组件,继承自QObject类和QPaintDevice类,QObject类是所有支持QT对象模型的基类,QPaintDevice类是QT中所有可绘制组件的基

Mozilla研究—深入理解mozilla所需的背景知识

mozilla是一个以浏览器为中心的软件平台,它在我们平台中占有重要地位.我们用它来实现WEB浏览器.WAP浏览器.邮件系统.电子书和帮助阅读器等应用程序.为此,我最近花了不少时间去阅读mozilla的代码和文档,我将写一系列的BLOG作为笔记,供有需要的朋友参考.本文介绍一下深入理解mozilla所需的背景知识. Mozilla非常庞大,据说有数百万行的代码.逐行理解所有代码是不可能的(也没有必要),不过要理解它的架构,以便充分利用它的功能是可能的.Mozilla涉及的技术比较多,如果不理解这

嵌入式linux QT开发(一)——QT简介

嵌入式linux QT开发(一)--QT简介 一.QT简介 1.QT简介 QT是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt Creator, QtEmbedded,Qt Designer快速开发工具,Qt Linguist国际化工具等部分,Qt支持所有Linux/Unix系统,还支持Windows平台. 2.QT优点 Qt是一个跨平台的C++图形用户界面应用程序框架,提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt很容易扩展,并且允许真正地组

QT开发(四十八)——数据库SQL接口层

QT开发(四十八)--数据库SQL接口层 SQL接口层提供了对数据库的访问,主要类包括Qt SQL模块中的QSqlDatabase.QSqlQuery.QSqlError.QSqlField.QSqlIndex和QSqlRecord.QSqlDatabase类用于创建数据库连接,QSqlQuery用于使用SQL语句实现与数据库交互. 一.QSqlDatabase 1.QSqlDatabase简介 QSqlDatabase类提供了通过连接访问数据库的接口,QSqlDatabase对象本身代表一个连

QT开发(四十九)——数据库用户接口层

QT开发(四十九)--数据库用户接口层 用户接口层主要包括Qt SQL模块中的QSqlQueryModel.QSqlTableModel.QSqlRelationalTableModel.用户接口层的类实现了将数据库中的数据链接到窗口部件上,是使用模型/视图框架实现的,是更高层次的抽象,即便不熟悉SQL也可以操作数据库.需要注意的是,在使用用户接口层的类之前必须先实例化QCoreApplication对象. QT中使用了自己的机制来避免使用SQL语句,提供了更简单的数据库操作及数据显示模型,分别

QT开发(五十一)——QtQuick基础

QT开发(五十一)--QtQuick基础 一.QtQuick简介 QT提供了两种独立的方法创建用户界面. QtQuick模块为创建流畅.鲜活的用户界面提供了一种标记语言.QtQuick模块适合需要动画元素的界面,以及应用程序主要运行在小屏幕和多点触控的设备上的场景. QtWidgets模块针对传统桌面提供了更多的支持,和目标平台做了更多的集成,无论目标平台是MacOSX.Windows.KDE.GNome.QtWidgets是一个非常高效的基于C++的类库,包含很多常见的用户界面组件,可以非常容

QT开发(十四)——QT绘图系统

QT开发(十四)--QT绘图系统 一.QT绘图原理 Qt4中的2D绘图系统称为Arthur绘图系统,可以使用相同的API在屏幕上和绘图设备上进行绘制,主要基于QPainter.QPainterDevice和 QPainterEngine.QPainter执行绘图操作,QPainterDevice提供绘图设备,是一个二维空间的抽象,QPainterEngine提供一些接口.QPainter用来执行具体的绘图相关操作,如画点,画线,填充,变换,alpha通道等.QPaintDevice类是能够进行绘

嵌入式linux QT开发(三)——GUI原理分析

嵌入式linux QT开发(三)--GUI原理分析 一.命令行程序 命令行程序是面向过程的程序设计. 命令行程序的特点: A.基于顺序结构执行 B.程序执行过程中不需与用户交互 C.程序执行结束给出最终运行结果 命令行程序适用场合: A.单任务场合 B.无交互.简单交互场合 C.服务器应用场合 二.GUI程序 GUI程序的特点: A.基于消息驱动模型的程序 B.程序执行依赖用户交互过程 C.程序执行过程中实时响应用户操作 D.一般程序执行后不会主动退出 GUI程序适用场合: A.多任务场合 B.