[Qt教程] 第40篇 网络(十)WebKit初识

[Qt教程] 第40篇
网络(十)WebKit初识

楼主

 发表于 2013-9-11 17:26:05 | 查看:
521| 回复: 10


WebKit初识

版权声明


该文章原创于作者yafeilinux,转载请注明出处!

导语


WebKit是一个开源的浏览器引擎。Qt中提供了基于WebKit的QtWebKit模块,它包含了一组相关的类。QtWebKit提供了一个Web浏览器引擎,使用它便可以很容易的将万维网(WorldWide Web)中的内容嵌入到Qt应用程序中。与此同时,本地也可以对Web内容进行控制。QtWebKit可以呈现HTML(HyperTextMarkup
Language,超文本标记语言)文档、XHTML(Extensible HyperTextMarkup Language,可扩展超文本标记语言)文档和SVG(Scalable VectorGraphics,可缩放矢量图形)文档,风格使用CSS(Cascading StyleSheets,层叠样式表),脚本使用JavaScript。在JavaScript执行环境和Qt对象模型间搭建的桥梁,实现了使用WebKit的JavaScript环境访问本地对象。关于这一点,大家可以在帮助中参考The QtWebKit
Bridge关键字对应的文档。通过整合Qt的网络模块,实现了从Web服务器、本地文件系统甚至Qt资源系统中透明的加载Web页面。

环境:Windows Xp + Qt 4.8.5+Qt Creator2.8.0

目录


一、简单应用

二、扩展应用

正文


一、简单应用

下面我们来实现一个可以打开特定网页的程序。新建空的Qt项目,在pro项目文件中添加一行代码:QT
+= webkit,然后向项目中添加一个main.cpp文件,并在其中添加如下代码:

#include <QWebView>

#include <QApplication>

int main(int
argc, char* argv[])

{

    QApplication a(argc, argv);

    QWebView view;

    view.load(QUrl("http://www.qter.org"));

    view.show();

    return a.exec();

}

       要使用WebKit,就要先添加webkit模块。QWebView是QtWebKit模块主要的窗体部件,它可以在各种应用程序中用来显示Internet上的网页内容。QWebView作为一个窗口部件,可以嵌入到窗体或者图形视图部件中。

QWebView用来显示Web页面,每个QWebView实例都包含一个QWebPage对象。QWebPage提供了对一个页面的文档结构的访问,描述了如框架(frame)、访问历史记录和可编辑内容的撤销/重做栈等特色。每一个QWebPage都包含一个QWebFrame对象作为它的主框架。在HTML中的每一个单独的框架都可以使用QWebFrame来表示,这个类包含了到JavaScript窗口对象的桥梁,而且可以进行绘制。在QWebPage的主框架中可以包含很多的子框架。

HTML文档中单独的元素可以通过DOM JavaScript接口进行访问,在QtWebKit中与这个接口等价的接口由QWebElement来表示。QWebElement对象可以使用QWebFrame的findAllElement()和findFirstElement()函数来获取。一般的网页浏览器的特色设置都可以通过QWebSettings类来配置,可以通过默认设置为所有的QWebPage实例提供默认值。单独的属性可以使用页面指定的设置对象进行重写。

二、扩展应用

下面再来看一个可以随意更改网址并且可以显示网站logo的例子。新建Qt Gui应用,项目名称为“webview”,类名和基类保持“MainWindow”和“QMainWindow”不变。完成后向webview.pro文件中添加QT += webkit一行代码,并按下Ctrl + S保存该文件。

1.下面到mainwindow.h文件中,先添加头文件:

#include <QWebView>

#include <QLineEdit>

然后添加槽的声明:

protected slots:

    void changeLocation(); 
   // 改变路径

    void setProgress(int); 
   // 更新进度

    void adjustTitle(); 
      // 更新标题显示

void finishLoading(bool);  // 加载完成后进行处理

       再添加对象和变量定义:

QWebView *view;

QLineEdit *locationEdit;

int progress;

2.下面到mainwindow.cpp文件中,在构造函数中添加如下代码:

  1. progress = 0;
  2. view = new QWebView(this);
  3. setCentralWidget(view);
  4. resize(800, 600);
  5. // 关联信号和槽
  6. connect(view, SIGNAL(loadProgress(int)), this, SLOT(setProgress(int)));
  7. connect(view, SIGNAL(titleChanged(QString)), this, SLOT(adjustTitle()));
  8. connect(view, SIGNAL(loadFinished(bool)), this, SLOT(finishLoading(bool)));
  9. locationEdit = new QLineEdit(this);
  10. connect(locationEdit, SIGNAL(returnPressed()), this, SLOT(changeLocation()));
  11. // 向工具栏添加动作和部件
  12. ui->mainToolBar->addAction(view->pageAction(QWebPage::Back));
  13. ui->mainToolBar->addAction(view->pageAction(QWebPage::Forward));
  14. ui->mainToolBar->addAction(view->pageAction(QWebPage::Reload));
  15. ui->mainToolBar->addAction(view->pageAction(QWebPage::Stop));
  16. ui->mainToolBar->addWidget(locationEdit);
  17. // 设置并加载初始网页地址
  18. locationEdit->setText("http://www.baidu.com");
  19. view->load(QUrl("http://www.baidu.com"));

复制代码

       当QWebView开始加载时,会发射loadStarted()信号;而每当一个网页元素(例如一张图片或一个脚本等)加载完成时,都会发射loadProgress()信号;最后,当加载全部完成后,会发射loadFinished()信号,如果加载成功,该函数的参数为true,否则为false。可以使用title()来获取HTML文档的标题,如果标题发生了改变,将会发射titleChanged()信号。

3.下面添加那几个槽的定义:

void MainWindow::changeLocation()

{

    QUrl url = QUrl(locationEdit->text());

    view->load(url);

    view->setFocus();

}

void MainWindow::setProgress(int
p)

{

    progress = p;

    adjustTitle();

}

void MainWindow::adjustTitle()

{

    if ( progress <= 0 || progress >= 100) {

       setWindowTitle(view->title());

    } else {

setWindowTitle(QString("%1 (%2%)").arg(view->title()).arg(progress));

    }

}

void MainWindow::finishLoading(bool
finished)

{

    if (finished) {

       progress = 100;

       setWindowTitle(view->title());

    } else {

       setWindowTitle("web
page loading error!");

    }

}

       下面运行程序,效果如下图所示:

结语


WebKit是一个很庞大的体系,我们这里只是讲解了其最基本的应用,有兴趣的朋友可以结合Qt文档来进一步的学习。



涉及到的代码:  myweb.rar (382
Bytes, 下载次数: 3)  webview.rar (2.17
KB, 下载次数: 5) 
时间: 2024-08-02 17:52:49

[Qt教程] 第40篇 网络(十)WebKit初识的相关文章

[Qt教程] 第32篇 网络(二)HTTP

[Qt教程] 第32篇 网络(二)HTTP 楼主  发表于 2013-8-28 17:21:28 | 查看: 637| 回复: 8 HTTP 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语        HTTP(HyperText Transfer Protocol,超文本传输协议)是一个客户端和服务器端请求和应答的标准.在Qt的网络模块中提供了网络访问接口来实现HTTP编程.网络访问接口是执行一般的网络操作的类的集合,该接口在特定的操作和使用的协议(例如,通过HTTP

[Qt教程] 第34篇 网络(四)FTP(二)

[Qt教程] 第34篇 网络(四)FTP(二) 楼主  发表于 2013-9-4 15:04:38 | 查看: 315| 回复: 9 FTP(二) 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语 前面讲述了一个最简单的FTP客户端程序的编写,这一节我们将这个程序进行扩展,使其可以浏览并能下载服务器上的所有文件. 环境:Windows Xp + Qt 4.8.5+QtCreator 2.8.0 目录 一.修改界面 二.功能实现 正文 一.修改界面 我们删除了TextBrow

[Qt教程] 第31篇 网络(一)Qt网络编程简介

[Qt教程] 第31篇 网络(一)Qt网络编程简介 楼主  发表于 2013-8-28 17:04:17 | 查看: 515| 回复: 0 Qt网络编程简介 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语 从这一节开始我们讲述Qt网络应用方面的编程知识.在开始这部分知识的学习之前,大家最好已经拥有了一定的网络知识和Qt的编程基础.在后面的教程中我们不会对一个常用的网络名词进行详细的解释,对于不太了解的地方,大家可以参考相关书籍. 不过,大家也没有必要非得先去学习网络专业知

[Qt教程] 第35篇 网络(五)获取本机网络信息

[Qt教程] 第35篇 网络(五)获取本机网络信息 楼主  发表于 2013-9-5 11:32:58 | 查看: 278| 回复: 2 获取本机网络信息 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语 前面讲完了HTTP和FTP,下面本来该讲解UDP和TCP了.不过,在讲解它们之前,我们先在这一节里讲解一个以后要经常用到的名词,那就是IP地址.        对于IP地址,其实,会上网的人都应该听说过它.如果你实在很不属性,那么简单的说:IP即InternetProto

[Qt教程] 第33篇 网络(三)FTP(一)

[Qt教程] 第33篇 网络(三)FTP(一) 楼主  发表于 2013-9-4 14:52:46 | 查看: 392| 回复: 8 FTP(一) 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语 上一节我们讲述了HTTP的编程,这一节讲述与其及其相似的FTP的编程.FTP即FileTransfer Protocol,也就是文件传输协议.FTP的主要作用,就是让用户连接上一个远程计算机,查看远程计算机有哪些文件,然后把文件从远程计算机上拷贝到本地计算机,或者把本地计算机的文

[Qt教程] 第36篇 网络(六)UDP

[Qt教程] 第36篇 网络(六)UDP 楼主  发表于 2013-9-5 11:38:50 | 查看: 241| 回复: 0 UDP 版权声明 该文章原创作者yafeilinux,转载请注明出处! 导语 这一节讲述UDP编程的知识.UDP(UserDatagram Protocol即用户数据报协议)是一个轻量级的,不可靠的,面向数据报的无连接协议.对于UDP我们不再进行过多介绍,如果你对UDP不是很了解,而且不知道它有什么用,那么这里就举个简单的例子:我们现在几乎每个人都使用的腾讯QQ,其聊天

[Qt教程] 第38篇 网络(八)TCP(二)

[Qt教程] 第38篇 网络(八)TCP(二) 楼主  发表于 2013-9-6 15:50:35 | 查看: 421| 回复: 3 TCP(二) 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语 在上一节里我们使用TCP服务器发送一个字符串,然后在TCP客户端进行接收.在这一节将重新写一个客户端程序和一个服务器程序,这次实现客户端进行文件的发送,服务器进行文件的接收.有了上一节的基础,这一节的内容就很好理解了,注意一下几个信号和槽的关联即可.当然,我们这次要更深入了解一下

[Qt教程] 第39篇 网络(九)进程和线程

[Qt教程] 第39篇 网络(九)进程和线程 楼主  发表于 2013-8-29 15:48:56 | 查看: 415| 回复: 0 进程和线程 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语 在前面的几节内容中讲解了Qt网络编程的一些基本内容,这一节来看一下在Qt中进程和线程的基本应用. 环境:Windows Xp + Qt 4.8.5+Qt Creator2.8.0 目录 一.进程 二.线程 正文 一.进程     在设计一个应用程序时,有时不希望将一个不太相关的功能

[Qt教程] 第37篇 网络(七)TCP(一)

[Qt教程] 第37篇 网络(七)TCP(一) 楼主  发表于 2013-9-6 15:44:45 | 查看: 398| 回复: 1 TCP (一) 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导语 TCP即TransmissionControl Protocol,传输控制协议.与UDP不同,它是面向连接和数据流的可靠传输协议.也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP协议.         TCP协议的程序使用