QWebView或QWebEngineView

32

QWebView和QWebEngineView之间有任何功能性差异吗?如果我理解正确,QWebView是webkit,而QWebEngineView是blink。对程序员来说有什么不同吗?是否有一个比另一个提供更多外观自定义选项?


答案取决于您是否关心向前兼容性 - Qt将在未来某个时候放弃对WebKit的支持。 - MrEricSir
1
这个有时间范围吗?比如5.5,还是尚未指定? - graywolf
2
根据Qt 5.4发布公告,WebKit支持将在5.5中被弃用,并且不会添加新功能。实际上,在Qt 6之前完全删除它是不太可能的,因为那显然会破坏二进制兼容性。 - MrEricSir
在我看来,当针对iOS或Android时,QWebView似乎是唯一的选择,而QWebEngineView仅适用于桌面。这正确吗? - davidkomer
我投票赞成开放,因为两者之间存在显著差异,因此列出差异清单不会是基于观点的,但仍然非常有用。 - Adrian Maire
3个回答

27

我建议你尝试一下QtWebEngine,毕竟它正在替换QtWebKit。

如果你可以控制HTML的呈现,那么使用QWebKit可能没有什么坏处。只是确保在页面发布前进行测试。

QWebView使用WebKit作为后端。

http://doc.qt.io/qt-5/qwebview.html#details

QWebEngineView使用Chromium作为后端。

http://doc.qt.io/qt-5/qwebengineview.html#details

WebKit是Linux中Konqueror和Rekonq使用的引擎。它不错,但在我看来,在一般(经常不完美)的网页/HTML上不太健壮。

Chromium是一个更新、更快速、更健壮的引擎。

我不知道所有具体的技术细节,但QWebEngine是向正确方向迈出的一大步。这主要来自于我自己的实验和实证使用。

要好好尝试一下WebKit,请查看此项目并尝试各种页面:

http://qtweb.net/

https://github.com/magist3r/QtWeb

以下是有关QtWebEngine和QtWebKit的更多信息:

http://wiki.qt.io/QtWebEngine

http://en.wikipedia.org/wiki/WebKit

http://wiki.qt.io/QtWebKit


6
Qt 5.5 开始弃用 QtWebKit :https://wiki.qt.io/New-Features-in-Qt-5.5#Deprecated_Functionality - Vincas Dargis

5
就我个人而言,我发现QWebEngineView中缺少一些非常重要的功能。首先,您无法访问页面上的所有框架,并且您无法在所有框架中运行JS。其次,您无法使用QNetworkAccessManager来控制视图下划线层。因此,目前我看不到任何解决某些问题的解决方案,例如如何在自定义应用程序中禁用FlashPlayer上的声音?。我想相信它可能以某种方式解决,因为QWebEngineView的工作速度更快,似乎没有(或较少)内存泄漏问题,而QWebView却有。

2
这是一个很好的观点.. 但由于qtwebkit将被弃用,我不知道还有什么其他选择 :/ 如果我找到了解决方案,我会让你知道。 - graywolf

3

框架:WebKit vs WebEngine

自2007年以来,Qt WebKit一直存在,直到版本3。根据这篇Qt博客和这里的描述,它被新的基于Chromium的Web引擎所取代,即Qt WebEngine。根据链接中的说明,Qt WebKit目前工作正常,并将在未来几年继续如此,但如果您想为应用程序或设备提供所有最新和最伟大的HTML5功能,则应考虑切换到Qt WebEngine。

正如这篇博客所说:Qt 5.4仍然包含较旧的Qt WebKit模块。Qt WebKit仍然受支持,但是从Qt 5.4开始,我们认为它已经完成了,因此不会向其中添加任何新功能。我们还计划在未来的发布中废弃Qt WebKit,因为新的Qt WebEngine提供了所需的功能。

我的决定:我更喜欢使用最新的QtWebEngine,特别是在初始阶段。如果遇到问题,可能会回退到Qt WebKit。

QML:WebView vs WebEngineView。

在QML中拥有一个浏览器项,有两个选项:WebView和WebEngineView。

WebView具有相同的名称,在WebKit和WebEngine中都有定义。WebKit中WebView的文档在这里。它应该导入QtWebKit 3.0。

为了使用绑定到WebEngine的WebView,我们需要这个导入:import QtWebView 1.0。但是我们很可能会遇到错误#5和#6,解决方案在链接中说明。

我将使用后者的WebView,即由WebEngine提供的WebView。证明它与WebEngnie相关的是错误#5和#6的调试解决方案。从现在开始,在本文档中,WebView指的是WebEngine提供的那个。

正如这篇博客所说:在Qt 5.4中,提供了Qt WebView,它提供了一个更有限的API来嵌入底层操作系统的本机Web浏览器,用于不需要完整的Qt WebEngine或由于来自底层操作系统的限制而无法使用它的用例。在Qt 5.4中,Qt WebView模块支持iOS和Android。它支持将底层操作系统的本机Web引擎嵌入到Qt中,并且目前可用于Android和iOS。因此,Qt WebView还为简单的Web文档集成提供了便捷的轻量级解决方案。

WebEngineView允许QML应用程序呈现动态Web内容的区域。WebEngineView组件可以与其他QML组件共享屏幕,也可以根据QML应用程序中指定的方式覆盖整个屏幕。在不执行iOS和Android的应用程序中,这是我的选择。

注意:根据这篇博客,QtWebView将在可能的情况下回退到使用QtWebEngine。与此同时,他们正在使更多平台可以使用WebView。作为对QT-Bug的回复,也提到:虽然我们没有针对OS X、Windows等的本机WebView实现,但我们可以回退使用QtWebEngine。

我的决定:在非安卓和iOS应用程序中使用WebEngineView。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接