【问题标题】:QWebView or QWebEngineViewQWebView 或 QWebEngineView
【发布时间】:2015-05-17 07:22:10
【问题描述】:

QWebView 和 QWebEngineView 之间有任何功能区别吗?如果我理解正确,QWebView 是 webkit,而 QWebEngineView 是闪烁。程序员有什么不同吗?一种是否提供比另一种更多的外观和感觉定制?

【问题讨论】:

  • 答案真的取决于你是否关心前向兼容性——Qt 将在未来的某个时候放弃对 WebKit 的支持。
  • 这个有时间限制吗?像 5.5 还是有待指定?
  • 根据 Qt 5.4 发布公告,WebKit 支持将在 5.5 中被弃用,并且不会添加任何新功能。实际上,在 Qt 6 之前他们不太可能完全删除它,因为这会(显然)破坏二进制兼容性。
  • 在我看来,QWebView 是针对 iOS 或 Android 的唯一选择,并且 QWebEngineView 仅在桌面上可用。这是正确的吗?
  • 我投票赞成开放,因为两者之间存在显着差异,因此,差异列表不会成为意见基础,仍然非常有用。

标签: qt qt5 qtwebkit qt5.4 qtwebengine


【解决方案1】:

框架:WebKit 与 WebEngine

从 2007 年到第 3 版,曾经有 Qt WebKit。根据这个 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 与 WebEngineView。

对于 QML 中的浏览器项目,有两个项目 WebView 和 WebEngineView。

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

为了使用本文档中提到的绑定到 WebEngine 的 WebView,我们需要进行此导入:import QtWebView 1.0。但是我们很可能会遇到错误 #5 和 #6,调试的解决方案是链接中的状态。

我将使用后者的 WebView,即 WebEngine 提供的那个。它与 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、Window 等的原生 WebView 实现,但我们可以回退到使用 QtWebEngine

我的决定:非 Android 和 iOS 应用程序中的 WebEngineView。

【讨论】:

    【解决方案2】:

    就我而言,我在 QWebEngineView 中看不到一些非常重要的功能。首先你不能访问页面上的所有框架,也不能在所有框架中运行JS。下一个是您不能将 QNetworkAccessManager 用于控制视图下划线层。所以现在我看不到一些问题的任何解决方案,比如How to disable sound on flashplayer in my custom application?。我想相信有可能以某种方式解决它,因为 QWebEngineView 工作得更快,而且看起来它没有(或更少)内存泄漏问题,然后 QWebView。

    【讨论】:

    • 这是一个很好的观点.. 但由于 qtwebkit 将被弃用,我看不出这里还有什么其他选择:/ 如果我找到解决方案,我会告诉你
    【解决方案3】:

    我会试试 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 和 Rekonq 上的 Konqueror 中使用的。它还不错,但在我看来,它在一般(并且通常是不完美的)网页/html 中并不那么健壮。

    Chromium 是一种更新、更快、更强大的引擎。

    我并不具体了解所有技术细节,但 QWebEngine 是朝着正确方向迈出的一大步。我主要从我自己的实验和经验使用中发现了这一点。

    为了给 WebKit 一个体面的尝试,看看这个项目并尝试各种页面:

    http://qtweb.net/

    https://github.com/magist3r/QtWeb

    这里是关于 QtWebEngine v QtWebKit 的更多信息

    http://wiki.qt.io/QtWebEngine

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

    http://wiki.qt.io/QtWebKit

    【讨论】:

    猜你喜欢
    • 2015-12-13
    • 2018-05-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2014-01-26
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多