QWebView/cn

From Qt Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

本文翻译自:QWebView Class Reference 翻译人员: habert

QWebView介绍

QWebView类提供了一个可以展现和编辑网页文档的widget。QWebView是QtWebKit网页浏览模块的一个主要widget组件,可以用它来展现互联网网页。 下图展现了一个在Qt Designer中创建的一个QWebView,它展现的是诺基亚的官网:

QWebView

可以使用QWebView的load()方法来加载一个网站,这里和其他的所有Qt的widget一样,你需要调用show()方法才会显示出QWebView。 如下例所示:

 QWebView *view = new QWebView(parent);
 view->load(QUrl("http://qt.nokia.com/"));
 view->show();

另外setUrl()方法也可以用来加载一个网站,而如果你有现成的HTML文件,则可以直接调用setHtml()方法来加载。当网页开始加载时会发出loadStarted()的信号,当网页中任何一个元素被加载完都会发出loadProgress()信号,例如一个图片,或是一段脚本。最后当网页全部加载完成后会发出loadFinished()信号,其中loadFinished()信号携带的参数会说明加载是否成功,如果参数为真则加载成功,否则加载失败。

page()方法返回一个指向QWebPage网页对象的指针,在下面我们会讲到QWebPage和QWebView之间的关系。你可以通过QWebView的settings()方法获得QWebSettings对象,进而可以对网页做相关设置,比如修改默认的字体,开启或禁止JavaScript和插件等。通过QWebView的title()方法,我们可以访问到一个HTML文档的标题,即这个网页的标题。另外,一个网站可能会有站标(就是这个网站的标志,是一个小图标),这时我们可以通过icon()属性来获得站标。如果网站标题或是站标变了,相应的titleChanged() 或是iconChanged()信号会被发送。可以通过textSizeMultiplier()属性来改变QWebView中打开所有网页的文字大小。

如果你需要定制上下文菜单,你可以通过重新实现contextMenuEvent()方法,然后使用pageAction()返回的QAction来构建你的QMenu菜单。其他功能像重新加载网页,拷贝选择的文字到剪切板以及粘贴到网页,也都可以通过传递给pageAction()方法相应的参数来获得相应的QAction对象。这些QAction对象可以通过triggerPageAction()方法来触发,另外这些QAction对象也可以被直接加到工具条或是菜单中。QWebView维护这些QAction对象的状态,但也允许修改它们的一些属性,例如文字,图标icon等。

一个QWebView对象可以使用QPrinter的print()方法来实现打印输出,这个方法是一个槽,可以很容易连接到QPrintPreviewDialog的paintRequested()信号上。为了对网站提供更多的支持,可能你会想允许用户打开新的窗口,例如弹出窗口,这时你可以通过继承QWebView,然后重新实现createWindow()方法即可。

QWebView的元素

QWebView对象由多个对象组成,比如QWebFrame对象和QWebPage对象,下图说明了这些对象之间的关系: qwebview-diagram

注意:如果不需要QWidget的一些属性,这里可以直接使用QWebPage和QWebFrame,不是说一定要有QWebView才可以。由于 QtWebKit依赖于QtGui模块,所以构建程序时应该使用QApplication而不是QCoreApplication。