[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 环境:Windows Xp + Qt 4.8.5+Qt Creator2.8.0 目录 一、简单应用 二、扩展应用 正文 一、简单应用 下面我们来实现一个可以打开特定网页的程序。新建空的Qt项目,在pro项目文件中添加一行代码:QT #include <QWebView> #include <QApplication> int main(int { 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文件中,在构造函数中添加如下代码:
复制代码 当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 { 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 { if (finished) { progress = 100; setWindowTitle(view->title()); } else { setWindowTitle("web } } 下面运行程序,效果如下图所示: 结语 WebKit是一个很庞大的体系,我们这里只是讲解了其最基本的应用,有兴趣的朋友可以结合Qt文档来进一步的学习。 涉及到的代码: myweb.rar (382 Bytes, 下载次数: 3) webview.rar (2.17 KB, 下载次数: 5) |