皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Qt 6 中的 Qt WebEngine

Qt 6 中的 Qt WebEngine

自 6.2 以来,Qt WebEngine 已用于 Qt 6,但我仍然想谈谈 Qt 6 中 WebEngine 的不同之处,以及 Qt 6 时间框架中将发生哪些变化。

发布

曾经有人谈论将 WebEngine 从通用 Qt 版本中分离出来。这还没有发生,但我们正在努力为 Qt 6.2 提供更新的 WebEngine (6.3) 一旦它达到 LTS。这项工作还将确保所有用户都可以轻松地使用带有较旧 Qt 6 版本的较新 WebEngine。照原样,我们使用最后一个 LTS 分支 (6.2) 对新的 WebEngine 版本进行现场测试,因此它主要工作,但由于未经测试的更改或设置组合,用户可能会遇到冲突。

Qt WebEngine 6.3 将基于 Chromium 94,我们目前正在研究 Chromium 98 变基,但是对于 6.3 来说已经太晚了,转而使用 Qt 6.4,尽管 6.4 可能最终会基于 Chromium 100+已发布并重新基于。

Qt WebEngine 6.3 也终于转向使用 python 3 构建,因为 Chromium 最终在去年年底关闭了依赖于 python 2 的功能。

RHI 支持

Qt 6 将 OpenGL 默认渲染移至多后端 RHI 渲染框架。然而,Qt WebEngine 依赖于仍在内部使用 OpenGL 的 Chromium,以及仍然仅支持 OpenGL 和软件后端的QQuickWidget 。这意味着目前 WebEngine 仅适用于 OpenGL 或软件,并且会在加载时尝试将默认渲染后端设置为 OpenGL,如果失败,则使用软件渲染。存在一个启用 Vulkan 渲染的补丁集,但 Vulkan 驱动程序质量参差不齐使得测试变得困难,并且由于它不是任何较低优先级的默认设置,因此欢迎有兴趣的用户测试更改,它只是 QML,因为小部件代码使用前面提到的 QQuickWidget。我们正在寻找能够在 Metal 和 D3D11 后端使用硬件加速渲染的解决方案,并修复对 QQuickWidget 的依赖。

API 更改

WebEngine 在 Widgets 和 QML 中在 Qt 5 中有许多重复的 API。在 Qt 6 中,许多这些 API 已被统一到 Qt WebEngineCore 中的类中。在大多数情况下,这对用户几乎没有什么影响,除非您在 C++ 包含行中有模块名称。大多数新的核心 API 已从 WebEngineWidgets 移至 WebEngineCore,但也有一些已从 WebEngineQuick 移至 WebEngineCore,并为 C++ 用户提供新的 API。

QML 模块现在被称为 WebEngineQuick 而不是 WebEngine,以消除它与超级模块的歧义。

已经引入了一些方法来避免用户必须从 QWebEnginePage 派生。例如,完成QWebEnginePage::createWindow()的工作现在也可以通过处理QWebEnginePage::newWindowRequested()信号来完成。类似地  ,QWebEnginePage::acceptNavigationRequest()可以通过处理QWebEnginePage::navigationRequested()信号来实现。这些新的请求对象也提供了比旧方法调用更多的数据。

QWebEngineDownloadItem已重命名为QWebEngineDownloadRequest以与其他 API 更加一致。

QWebEngineLoadingInfo以前是QML 中的WebEngineLoadRequest,是 C++ 中的新 API。它提供了有关加载进度和错误的更多信息。

QWebEngineProfile、QWebEngineScript、QWebEngineScriptCollection、QWebEngineClientCertificationSelection、QWebEngineSettings 和 QWebEngineFullscreenRequest 都已从 WebEngineWidgets 移至 WebEngineCore,而且改动很小。

未来的 API

我们希望引入的 API 之一是 QWebEngineView 的 QtGUI 唯一替代品,称为 QWebEngineWindow。这也应该有助于我们避免对 QQuickWidget 的依赖及其限制。它面向 Qt 6.4 或 6.5。

其他工作包括在 Chromium 中使用 ANGLE 以能够渲染到 D3D 或 Metal 上。这也是 Vulkan 实现在内部所做的,但 Chromium 目前只有 OpenGL、软件和 Vulkan 合成器 API 用于嵌入器

转自 https://www.qt.io/blog/qt-webengine-in-qt-6