本页面

Qt WebEngine 功能

Qt WebEngine 支持以下功能:

音频和视频编解码器

Qt WebEngine 只有启用了所需的专有音频和视频编解码器(如 H.264 和 MPEG layer-3 (MP3)),WebEngineDriver 才能支持 MPEG-4 Part 14 (MP4) 文件格式。在配置 Qt 时,可通过向configure 工具传递以下选项来启用专有编解码器:

-webengine-proprietary-codecs

例如,在配置 Qt 以在顶层构建它时,可传递以下选项:

configure -webengine-proprietary-codecs

更多信息,请参阅Qt 配置选项

当使用 cmake 只构建Qt WebEngine 模块时,可使用以下命令进行配置和构建(在本例中,Qt WebEngine 源代码位于C:\qt\qtwebengine ):

qt-configure-module C:\qt\qtwebengine -webengine-proprietary-codecs
cmake --build . --parallel

警告: 在发布专有编解码器库时,您必须获得它们的许可证。

FFmpeg是一种跨平台解决方案,用于录制、转换和流式传输音频和视频。它可与多种编解码器一起配置使用,这就在分发编解码器库时产生了许可证问题。对于某些编解码器,可使用OpenH264 等开源实现。

Chromium 开发工具

Chromium DevTools 可检查和调试任何网页内容的布局和性能问题。

使用--remote-debugging-port=[your-port] 命令行选项启动Qt WebEngine 应用程序,或设置QTWEBENGINE_REMOTE_DEBUGGING 环境变量,然后使用基于 Chromium 的浏览器(如Simple BrowserNano Browser)连接http://localhost:[your-port] ,即可测试该功能。

注意: 任何WebEngine 命令行选项都应在--webEngineArgs 选项之后指定,该选项用于将用户的应用程序特定选项与WebEngine 选项分开。

--webEngineArgs --remote-debugging-port=5000

为避免远程调试时出现 WebSocket 错误,请添加一个额外的命令行参数--remote-allow-origins=<origin>[,<origin>, ...] ,其中<origin> 指的是请求来源。使用--remote-allow-origins=* 允许来自所有来源的连接。如果未指定任何参数,当启用远程调试时,Qt WebEngine 会在命令行参数中添加--remote-allow-origins=* ,从而允许来自所有来源的请求。

Chromium DevTools 页面也可以在应用程序中显示。要进行设置,你可以调用QWebEnginePage::setInspectedPage() 到要检查的页面,这样会将 DevTools 隐式加载到this 页面,或者调用QWebEnginePage::setDevToolsPage() 让this 页面被检查。

相应的 QML 属性是WebEngineView.devToolsViewWebEngineView.inspectedView

更多信息,请参阅Qt WebEngine 调试和剖析

客户端证书

Qt WebEngine 会读取安装在 macOS 和 Windows 系统设置中的客户端证书,以及安装在 Linux NSS 数据库中的客户端证书。可使用pk12util 工具将证书安装到 NSS 数据库中。

默认情况下,Qt WebEngine 不会向服务器提供任何客户端证书,因为这样做可以唯一识别用户身份,并可能违反隐私保护规定。

要激活对客户端证书的支持,应用程序需要监听QWebEnginePage::selectClientCertificateWebEngineView.selectClientCertificate 信号,并从提供的证书中选择一个。对于可以浏览不受信任网站的应用程序,建议在向远程服务器唯一标识用户身份之前,始终让用户有选择的余地。

除了存储在系统设置中的客户端证书外,Qt WebEngine 还提供内存存储。QWebEngineClientCertificateStore 实例可通过QWebEngineProfile::clientCertificateStore() 方法获取。应用程序可使用该类调用QWebEngineClientCertificateStore::add() 添加新证书。请注意,在调用selectClientCertificate 时,Qt WebEngine 会同时列出系统和内存中存储的客户证书。

更多实现细节,另请参阅客户证书示例

自定义方案

Qt WebEngine 使应用程序可以使用专门的安全策略和传输机制定义自己的自定义 URL 方案。

自定义方案可用于实施具有所有常用网络安全策略的替代网络协议、用于显示用户界面组件或调试信息的特权内部方案、具有额外限制的沙盒方案等。

更多信息,请参阅QWebEngineUrlSchemeQWebEngineUrlSchemeHandler

拖放

Qt WebEngine 支持 HTML5 拖放。

可以在简单浏览器Nano 浏览器中打开 HTML5 拖放演示,如 HTML5演示 - 拖放、HTML5 演示- 简单拖放HTML5 演示 - 拖放,自动上传,来测试该功能。

将文件拖入浏览器实际上并不是 HTML5 的一部分,但它是受支持的。可以通过打开HTML5 演示 - 文件 API 进行测试。

图标

Qt WebEngine 支持网站 URL 图标,即favicon。每个图标都存储在每个QWebEngineProfile 的内部数据库中,可以使用QWebEnginePage::icon() 调用或WebEngineView.icon 属性访问当前加载的内容。

此外,Qt WebEngine 还提供 API,用于访问内部配置文件数据库中已存储的图标。

注: 图标数据库不适用于非记录配置文件。

QML Favicon 处理

为访问图标,注册了QQuickImageProvider 。可通过特殊 URL 访问该提供者,其中方案为 "image:",主机为 "favicon"。

Image {
    source: "image://favicon/url"
}

url 可以是 favicon 的 URL:

Image {
    source: "image://favicon/https://www.qt.io/hubfs/2016_Qt_Logo/qt_logo_green_rgb_16x16.png"
}

url 也可以是访问其图标的页面 URL:

Image {
    source: "image://favicon/https://www.qt.io/"
}

如果有多个图标可用,可指定Image::sourceSize 属性,以选择所需大小的图标。如果Image::sourceSize 未指定或为 0,则将选择最大的可用图标。

图片提供程序会在现有的WebEngineView 实例中查找请求的图标。首先,它会尝试匹配当前显示的图标。如果没有找到匹配的图标,它就会从数据库中请求图标。每个配置文件都有自己的图标数据库,并存储在持久存储中,因此无需网络连接也能访问存储的图标。图标必须事先加载过才能存储到数据库中。

C++ 图标处理

用户可以使用QWebEngineProfile::requestIconForPageURL() 或QWebEngineProfile::requestIconForIconURL() 调用,从先前加载的内容中为每个QWebEngineProfile 请求一个图标。请注意,配置文件的数据库存储在持久存储器中,无需网络连接即可访问。

全屏

Qt WebEngine 支持以全屏模式查看网页内容。更多信息,请参阅WebEngineSettings.fullscreenSupportEnabled,WebEngineView.fullScreenRequested,QWebEngineSettings::FullScreenSupportEnabledQWebEnginePage::fullScreenRequested

视频播放器Nano 浏览器中播放 YouTube 上的视频,然后单击全屏图标进入全屏模式,即可测试该功能。

硬件加速

Qt WebEngine Chrome 浏览器会尽可能使用硬件加速来渲染网页内容。实际渲染由 Chromium 执行,最终图像由 Chromium 的合成器生成,合成器根据平台和可用驱动程序使用 OpenGL、Vulkan、Metal 或 Direct3D 等现代 GPU API。

然后,Qt WebEngine ,利用 GPU 互操作性将最终图像导入 Qt XML 渲染管道,从而有效共享 GPU 资源,避免不必要的复制。导入的图像会传递到Qt Quick Scene Graphs,后者也会通过 Qt Rendering Hardware Interface (RHI) 执行硬件加速渲染。

虽然 Qt 和 Chromium 都依赖 GPU 加速,但它们不一定使用相同的图形 API。在实践中,Qt WebEngine 会尽可能将 Chromium 的 GPU 后端与 Qt 使用的 GPU 后端保持一致,默认使用 Qt 选择的后端配置,以确保兼容性和最佳性能,但如果需要,也可以手动覆盖这些默认设置。

当硬件加速不可用或失效时,Qt WebEngine 会自动尝试退回到软件渲染。

强制使用软件渲染

自动回退到软件渲染并不总是可行的,Qt WebEngine 可能无法正确显示网页内容,或以错误信息退出。在这种情况下,可能需要明确禁用硬件加速并使用软件呈现。

有多种方法可以强制使用软件呈现:

  • 在 Chromium 中禁用硬件加速:
    export QTWEBENGINE_CHROMIUM_FLAGS=--disable-gpu
  • Qt Quick 场景图中禁用硬件加速:
    export QT_QUICK_BACKEND=software

在 Qt 中更改图形 API 后端

有两种方法可以选择图形 API 后端:

更多详情,请参阅通过 Qt 渲染硬件接口进行渲染

更改 Chromium 的图形 API 后端

一般不建议更改 Chromium 的图形 API 后端,因为这可能会导致兼容性问题或不一致的渲染行为。尽可能使用QSG_RHI_BACKEND 环境变量。不过,在某些情况下,为了调试或临时解决特定驱动程序的问题,可能有必要这样做。

要覆盖 Chromium 的后端,可设置QTWEBENGINE_CHROMIUM_FLAGS 环境变量,传递相应的 Chromium 命令行标志,如--use-gl=--use-angle=

Qt WebEngine 中,Chromium 目前在所有支持硬件加速的平台上默认使用ANGLE后端。ANGLE 是 Chromium 中的跨平台图形抽象层,可以隐藏底层的本地图形后端。

Qt WebEngine 使用的默认配置是这样的:

export QTWEBENGINE_CHROMIUM_FLAGS="--use-gl=angle --use-angle=default"

如果 ANGLE 在特定配置下崩溃,可以完全禁用它,同时仍使用 Vulkan 进行硬件加速渲染:

export QTWEBENGINE_CHROMIUM_FLAGS="--use-gl=stub --enable-features=Vulkan --use-vulkan=native"

注意: 某些功能(如WebGL)可能无法使用这样的自定义配置。

另外,以下配置使用 Vulkan 进行渲染,同时启用 ANGLE 以支持WebGL

export QTWEBENGINE_CHROMIUM_FLAGS="--use-gl=angle --enable-features=Vulkan --use-vulkan=native"

有关相应 Chromium 命令行标志的更多详情,请参阅 Chromium 源代码://ui/gl/gl_switches.cc

英伟达™(NVIDIA®)在 Linux 上的应用

在配备英伟达™(NVIDIA®)GPU 的 Linux 系统上,Chromium 被迫使用 Vulkan 进行渲染。

Qt WebEngine Vulkan 使用 GBM 缓冲对象将 Chromium 中的纹理导入 Qt 的图形管道。然而,英伟达驱动程序目前不支持分配这些缓冲对象。作为一种变通办法,Qt WebEngine 强制 Chromium 使用 Vulkan 渲染,并使用 Vulkan 互操作性导入纹理。

注意: Qt 本身并不强制使用 Vulkan。Chromium 使用--use-gl=angle --enable-features=Vulkan --use-vulkan=native 配置。

启用日志记录和故障排除

当出现渲染问题时,了解故障配置和硬件加速的当前状态对于有效调查和报告问题非常重要。

检查这些信息的最简单方法是加载chrome://gpu 内部页面并分析其内容。不过,在出现渲染问题时,该页面可能并不总是可读或可用的。

Qt WebEngine 日志提供了日志类别,启用后可转储详细的图形信息:

  • qt.webenginecontext 记录Qt WebEngine 如何初始化、检测到的 GPU 以及图形配置。
  • qt.webengine.compositor 记录 Chromium 使用的配置以及Qt WebEngine 将纹理导入 Qt 图形管道的步骤。

要启用这些日志,请设置QT_LOGGING_RULES 等环境变量:

export QT_LOGGING_RULES="qt.webenginecontext=true;qt.webengine.compositor=true"

注意: 如果 Qt 使用的QSG RHI Device 和 Chromium 使用的GL Renderer 不同,则表明 Qt 和 Chromium 在多 GPU 系统中使用了不同的 GPU,而目前并不支持多 GPU。

这是一个来自qt.webenginecontext 的 GPU 日志示例:

Chromium GL Backend: angle
Chromium ANGLE Backend: default
Chromium Vulkan Backend: disabled

QSG RHI Backend: OpenGL
QSG RHI Backend Supported: yes
QSG RHI Device: AMD AMD Radeon Graphics (radeonsi, raphael_mendocino, LLVM 20.1.8, DRM 3.61, 6.12.41-gentoo-x86_64) 4.6 (Compatibility Profile) Mesa 25.1.9
QSG RHI GPU Vendor: AMD

第一块显示 Chromium 配置:

  • Chromium GL Backend 显示--use-gl= 设置的值。
  • Chromium ANGLE Backend 显示--use-angle= 设置的值。
  • Chromium Vulkan Backend 显示--use-vulkan= 设置的值。

第二块显示 Qt 配置:

  • QSG RHI Backend 显示底层本地图形 API。
  • QSG RHI Backend Supported 表示Qt WebEngine 是否支持该图形 API。
  • QSG RHI Device 显示 RHI 所用图形设备的元数据。
  • QSG RHI Vendor 显示 RHI 所用图形设备的供应商。

这是一个来自qt.webengine.compositor 的同一 GPU 的 ANGLE 日志示例:

qt.webengine.compositor: ANGLE_OPENGL display is initialized:
GL Renderer: ANGLE (AMD, AMD Radeon Graphics (radeonsi raphael_mendocino LLVM 20.1.8), OpenGL 4.6 (Core Profile) Mesa 25.1.9)
2 GPU(s) detected:
  Nvidia, device id: 0x1d01, driver: Mesa 25.1.9, system device id: 0x0, preference: None, active: no
  AMD, device id: 0x164e, driver: Mesa 25.1.9, system device id: 0x0, preference: None, active: yes
NVIDIA Optimus: disabled
AMD Switchable: disabled

上述日志条目显示

  • ANGLE_OPENGL display is initialized 确认 ANGLE 已使用指定的显示类型成功初始化。
  • GL Renderer 显示 ANGLE 所用图形设备的元数据(预计与QSG RHI Device 匹配)。
  • 2 GPU(s) detected 列出 ANGLE 检测到的 GPU。
  • NVIDIA OptimusAMD Switchable 表示 ANGLE 是否支持运行时切换 GPU(目前不支持)。

HTML5 DRM

Qt WebEngine 如果安装了Widevine CDM插件,则支持显示受 DRM 保护的视频。该插件仅以二进制格式提供,因此可以隐藏 DRM 解密实施细节。您可以从第三方或 Google Chrome 浏览器安装程序中获取该插件。

注意: Widevine 插件不随Qt WebEngine 一起提供。

启动时,Qt WebEngine 会在几个众所周知的位置查找Widevine CDM插件,如默认的 Google Chrome 浏览器安装目录或 Linux 发行版的特定路径。您也可以通过QTWEBENGINE_CHROMIUM_FLAGS 使用widevine-path 传递插件位置。

在 Windows 上

set QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="C:/some path/widevinecdm.dll"

在 Linux 上

export QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="/some path/libwidevinecdm.so"

在 macOS 上

export QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="/some path/libwidevinecdm.dylib"

DRM 服务最常用的视频格式 H.264 需要专有的音频和视频编解码器。有关启用编解码器的更多信息,请参阅音频和视频编解码器

您可以在Simple BrowserNano Browser示例项目中播放castLabsBitmovin Player中的视频来测试此功能。

HTML5 地理定位

Qt WebEngine 支持以 Qt Positioning作为后端。HTML5 地理定位默认为禁用。要显式允许它,应用程序需要监听QWebEnginePage::permissionRequested 。当收到类型为QWebEnginePermission::PermissionType::Geolocation 的权限请求时,可以在收到的对象上调用QWebEnginePermission::grant() 来授予所需的权限。

如果Qt WebEngine 是在支持Qt Positioning 的情况下构建的,那么可以通过使用地图并允许其查找用户当前位置来测试该功能。

注: 在 Windows 11 中,启用设置以授予地图示例访问 Windows 定位服务的权限。在Privacy & Security >Location 下的 "设置 "应用程序中,启用Location servicesLet apps access your locationLet desktop apps access your location

请参见 Qt Positioning了解可能的后端设置,如基于 GPS 或 IP 的定位。

HTML5 权限

Qt WebEngine 通过QWebEnginePermission API,HTML5 支持多种类型的网络功能权限。只要网页请求潜在的敏感用户信息,如访问用户的摄像头或地理位置,就可以向网域授予(或拒绝)权限。

应用程序开发人员可以选择是向最终用户请求权限,还是自动为他们做出决定。此外,在已知域预计会请求某些权限的情况下,开发人员还可以预先授予或拒绝某些权限。

QWebEngineProfile 对象存储了已授予或拒绝授予单个域的所有权限。除非当前配置文件不在记录中,否则这些权限会存储到磁盘中,并在下一次打开应用程序时被调用。不过,这种行为是可以修改的,开发人员可以选择只在应用程序退出前存储权限,甚至在网站每次请求权限时都触发权限请求。

当前支持的网络权限的完整列表可在in the QWebEnginePermission documentation 上找到。

注: Web 权限不同于应用程序权限,后者由 QPermissions API 管理。网络权限授予的是单个网络域,而不是整个应用程序。不过,这两个 API 并不相互排斥。例如,访问用户的摄像头和麦克风可能需要通过这两个 API 授予权限。

框架

使用QWebEngineFrame API,开发人员可以检查网页中的单个<iframe> 元素并与之交互。这可用于注入 JavaScript,或只打印框架的内容,而忽略其嵌入的页面。对于框架存在于其他框架内的情况,还可以递归访问框架。

HTML5 WebSockets

Qt WebEngine 支持 WebSocket JavaScript API,可使用ws://wss:// 协议与 WebSocket 服务器通信。此外,与Qt WebChannelQt WebSockets 集成后,JavaScript 与应用程序的本地端之间也能进行通信。

Qt WebChannel 模块有一个很好的聊天服务器及其基于网络的聊天客户端示例。该客户端在Qt WebEngine 的浏览器示例(如Simple BrowserNano Browser)中开箱即用。

HTTP/2 协议

Qt WebEngine 支持HTTP/2协议的 Chromium 实现。

可以在简单浏览器纳米浏览器中打开 HTTP/2 演示(如Akamai HTTP/2 演示)来测试该功能。

本地存储

Qt WebEngine 本地存储支持在Local Storage 中保存键值对,且无过期日期。这是网络存储 API 的一部分,用户可以使用Window.localStorage JavaScript 属性访问给定域的Storage 对象。即使在页面或浏览器应用程序关闭后,存储的数据也会持续存在。

请注意,QWebEngineSettings::LocalStorageEnabled 设置也可以禁用Local 存储。此外,还可以通过调用QWebEngineProfile::setPersistentStoragePath 调整存储路径。

QWebEngineProfile profile("MyProfile");
profile.settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, isEnabled);
profile.setPersistentStoragePath("/path/to/storage");

Qt WebEngine 通过访问Application 面板并展开Local Storage 菜单,还可使用Qt WebEngine 开发人员工具轻松调查Local Storage 的内容。

本地对话框

网页可能需要对话框来实现以下功能:

  • 为 HTTP 和代理身份验证输入用户凭据
  • 显示 JavaScript 警告、确认对话框和提示
  • 选择颜色
  • 选择文件
  • 显示表单验证信息

Qt WebEngine 为这些功能提供了标准对话框。在基于 widget 的应用程序中,标准对话框基于QDialog ,而在Qt Quick 应用程序中,它们可以基于Qt Quick Controls 1 或Qt Quick Controls 2。后者仅用于eglfs 平台。

要明确强制使用基于Qt Quick Controls 1 或Qt Quick Controls 2 的对话框,可将QTWEBENGINE_DIALOG_SET 环境变量设置为QtQuickControls1QtQuickControls2

Qt WebEngine 可以通过重新实现QWebEnginePage::chooseFiles(),QWebEnginePage::javaScriptAlert(),QWebEnginePage::javaScriptConfirm() 和QWebEnginePage::javaScriptPrompt() 函数来定制 Widgets 对话框。

Qt Quick 可通过连接到WebEngineView::authenticationDialogRequested(),WebEngineView::javaScriptDialogRequested(),WebEngineView::colorDialogRequested(),WebEngineView::fileDialogRequested(), 和 WebEngineView::formValidationMessageRequested() 信号来定制对话框。

查看 PDF 文件

Qt WebEngine 支持通过导航查看 PDF 文档。该功能使用 Chromium 扩展 API 和 PDF 浏览器插件来显示 PDF 文档。可在简单浏览器纳米浏览器中进行测试。

该功能可通过QWebEngineSettings::PdfViewerEnabledWebEngineSettings::pdfViewerEnabled 设置打开(默认)或关闭。

页面生命周期 API

Qt WebEngine 支持页面生命周期 API 规范,该规范是 HTML 标准的一个正在进行中的扩展,允许用户代理通过冻结或丢弃后台页面来减少资源消耗。该功能在 Widgets 和 QML API 中均有体现。

有关使用 QML API 的示例,请参阅WebEngine 生命周期示例

生命周期状态概述

每个WebEngineView 项目(或QWebEnginePage 对象)都可以处于三种生命周期状态之一:激活、冻结或丢弃。这些状态就像 CPU 的休眠状态一样,控制着网页视图的资源使用情况。

活动状态是网络视图的正常、不受限制的状态。所有可见的网络视图始终处于活动状态,所有尚未完成加载的网络视图也是如此。只有不可见的空闲网络视图才能过渡到其他生命周期状态。

冻结状态是 CPU 占用率较低的状态。在这种状态下,大多数 HTML 任务源都会暂停(冻结),因此大多数 DOM 事件处理和 JavaScript 执行也会暂停。网络视图必须是不可见的才能被冻结,因为在这种状态下无法进行渲染。

丢弃状态是一种极端节省资源的状态。在这种状态下,网络视图的浏览上下文将被丢弃,相应的呈现器子进程也将关闭。在这种状态下,CPU 和内存的使用率几乎降为零。退出该状态后,网页将自动重新加载。进入和退出丢弃状态的过程类似于序列化网页视图的浏览历史记录并销毁视图,然后创建一个新视图并恢复其历史记录。

另请参阅WebEngineView::LifecycleState 。Widgets API 中的相应代码是QWebEnginePage::LifecycleState

lifecycleStaterecommendedState 属性

WebEngineView 类型的lifecycleState 属性是一个读写属性,用于控制网络视图的当前生命周期状态。该属性旨在尽可能减少对可转换状态的限制。例如,允许冻结当前正在播放背景音乐的网络视图,停止播放音乐。为了实施一种不那么激进的节省资源策略,避免中断用户可见的后台活动,必须使用recommendedState 属性。

WebEngineView 类型的recommendedState 属性是一个只读属性,它会根据网页视图的当前活动计算lifecycleState 属性的安全限制。因此,在网络视图后台播放音乐的示例中,推荐的状态将是Active ,因为更激进的状态会停止音乐播放。如果应用程序希望避免中断后台活动,那么就应该避免让网络视图进入比recommendedState 所给出的更积极的节省资源生命周期状态。

另请参见WebEngineView::lifecycleStateWebEngineView::recommendedState 。Widgets API 中的相应内容是QWebEnginePage::lifecycleStateQWebEnginePage::recommendedState

DOM 扩展

lifecycleState 属性与页面生命周期 API 规范相连,后者规定了两个新的 DOM 事件freezeresume ,并添加了一个新的Document.wasDiscarded 布尔型属性。从Active 过渡到Frozen state 时,会触发freezeresume 事件,反之亦然。从Discarded 状态过渡到Active 状态时,Document.wasDiscarded 属性将设置为true

Qt WebEngine 支持将网页打印为 PDF 文件。更多信息,请参阅QWebEnginePage::printToPdf() 和WebEngineView.printToPdf

该功能可使用Html2Pdf 进行测试。

推送通知

Qt WebEngine 支持 JavaScriptPush API以订阅和接收推送通知。更多信息,请参阅QWebEngineProfile::setPushServiceEnabled() 和WebEngineProfile.setPushServiceEnabled

该功能可通过WebEngine 推送通知示例进行测试。

拼写检查程序

Qt WebEngine 支持将拼写检查支持集成到 HTML 表单中,以便用户提交经过拼写检查的信息。当用户点击一个下划线拼写错误的单词时,默认的上下文菜单会显示多达四个建议。选择其中一个即可替换拼写错误的单词。

为了检查拼写,拼写检查程序需要词典。它支持来自Hunspell 项目的词典,但这些词典必须编译成一种特殊的二进制格式。Hunspell 词典由两个文件组成:

  • 一个.dic 文件,它是一个包含语言单词的词典
  • 一个.aff 文件,用于定义字典中特殊标志的含义

这两个文件可以通过 Qt XML 随附的qwebengine_convert_dict 工具转换成bdic 格式。当Qt WebEngine 拼写检查程序初始化时,它会尝试加载bdict 词典,并检查它们是否一致。

对于 CMake,可以使用qt_add_webengine_dictionary命令将 Hunspell.dic 文件转换为.bdic 二进制格式。该命令会创建一个qtwebengine_dictionaries target,您的项目可以将其作为依赖项。

默认情况下,Qt WebEngine 会在qtwebengine_dictionaries目录中搜索字典,如果该目录与可执行文件相对应的话。如果不存在,它将在QT_INSTALL_PREFIX/qtwebengine_dictionaries.

另外,也可以通过QTWEBENGINE_DICTIONARIES_PATH 环境变量或命令行设置字典目录路径:

--webEngineArgs --webengine-dictionaries-path=<path>

设置覆盖后,程序将只在提供的目录下查找词典,而不会在其他目录下查找。

在 macOS 上,根据Qt WebEngine 在构建时的配置,拼写检查数据的查找方式有两种可能:

  • Hunspell 词典(默认)- 与其他平台一样,使用 .bdic 词典
  • 本地词典 - 使用 macOS 拼写检查 API(这意味着结果将取决于已安装的操作系统词典)

因此,在 macOS Hunspell 的情况下,Qt WebEngine 将查找位于应用程序捆绑包Resources 目录内的qtwebengine_dictionaries子目录,以及位于 Qt framework 捆绑包内的Resources 目录。

总之,在使用 Hunspell 时,需要考虑以下路径:

拼写检查默认为禁用,可通过在基于 widget 的应用程序中使用QWebEngineProfile::setSpellCheckEnabled() 方法和在Qt Quick 应用程序中使用WebEngineProfile.spellCheckEnabled 属性按配置文件启用。

用于拼写检查的当前语言是按配置文件定义的,可使用QWebEngineProfile::setSpellCheckLanguages() 方法或WebEngineProfile.spellCheckLanguages 属性进行设置。

该功能可通过构建并运行拼写检查程序示例进行测试。

Qt WebEngine 使用webengine-spellchecker configure 开关,还可以编译出不支持拼写检查程序的版本。

qt-configure-module path\to\qtwebengine\sources -no-webengine-spellchecker

更多信息,请参阅Qt 配置选项

触摸

Qt WebEngine 支持触摸设备导航和与网页交互。

JavaScript API 对触摸事件的支持取决于触摸屏的存在(也就是说,如果系统连接了触摸设备,ontouchstart 和相关处理程序将出现在document.window 对象中)。

有些网站使用此 API 来决定是在移动设备上运行还是在台式机上运行,并以此为基础进行设计。这可能会在触摸屏笔记本电脑或其他模拟假触摸设备的设置上造成不必要的结果。

应用程序可通过QWebEngineSettings::TouchEventsApiEnabled 明确设置此功能。

请注意,即使禁用了 API,触摸事件仍会发送到网页。可以在WebEngine 视图焦点代理对象上使用QObject::installEventFilter 安装一个事件过滤对象,并过滤掉所有触摸事件,从而禁止向网页发送触摸事件。

视图源

Qt WebEngine 支持查看网页的 HTML 源代码。

该功能可在自定义菜单中使用,也可分配给自定义事件。更多信息,请参阅WebEngineView::WebAction, 和QWebEnginePage::WebAction

简单浏览器纳米浏览器中打开网页,然后在上下文菜单中选择Page Source ,即可测试该功能。Page Source 上下文菜单项会在新标签页中打开源视图。

要在当前标签页中打开源视图,还支持带有视图-源 URI 方案的URL。例如,你可以在 URL 栏中输入以下 URL 来查看 qt.io 网页的 HTML 源代码:

view-source:https://www.qt.io/

自动完成带有视图-源 URI 方案的不完整 URL 使该功能的使用更方便。例如,以下不完整的 URL 也能加载 qt.io 网页的源视图:

view-source:qt.io

网页通知

QtWebEngine 支持 JavaScriptWeb Notifications API。应用程序必须使用 QWebEnginePage::Notifications 或WebEngineView.Notifications 明确允许该功能。

网络引擎驱动程序

使用 WebEngineDriver,您可以跨浏览器自动测试网站。WebEngineDriver 基于 ChromeDriver,使用方法相同。有关 ChromeDriver 及其使用的更多信息,请访问ChromeDriver 用户网站

WebEngineDriver 与 ChromeDriver 相比略有改动,以便能够连接到基于Qt WebEngine 的浏览器。它兼容Qt WebEngine 示例浏览器,如Simple BrowserNano Browser

浏览器自动化通过类似Selenium WebDriverWebDriver 客户端编写脚本。例如,WebEngineDriver 可与 Selenium WebDriver 的 Python 语言绑定使用:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service(executable_path='QTDIR/libexec/webenginedriver')
options = webdriver.ChromeOptions()
options.binary_location = 'path/to/browser_binary'

driver = webdriver.Chrome(service=service, options=options)
driver.get("http://www.google.com/")
driver.quit()

在这个例子中

  • executable_path 必须设置为 WebEngineDriver 的二进制路径
  • QTDIR 是安装 Qt 的目录
  • options.binary_location 必须设置为浏览器的二进制路径

注: 在 Windows 系统上:executable_path='QTDIR/bin/webenginedriver.exe'

在执行脚本之前,必须设置QTWEBENGINE_REMOTE_DEBUGGING 环境变量。其值是浏览器和 WebEngineDriver 用于相互通信的端口号。

export QTWEBENGINE_REMOTE_DEBUGGING=12345

执行后,脚本将打开指定的网络浏览器并加载 Google 网站。

如果浏览器在启动时设置了远程调试端口,WebEngineDriver 也可以连接到已运行的浏览器。options.debugger_address 必须设置为脚本中的远程调试地址:

options.debugger_address = 'localhost:12345'

在这种情况下,不应设置options.binary_location ,因为浏览器已经在运行。如果设置了options.debugger_address ,WebEngineDriver 将不会使用环境变量QTWEBENGINE_REMOTE_DEBUGGING

注意: WebEngineDriver 必须与Qt WebEngine 使用的 Chromium 版本相同。

WebGL

Qt WebEngine 支持某些图形堆栈设置的 WebGL。用户可以使用QtWebEngine powered 应用程序访问 chrome://gpu 页面。图形功能状态概览会显示当前平台设置是否支持 WebGL。用户还可以查看WebGL 报告

WebGL 支持默认已启用。您可以通过QWebEngineSettings::WebGLEnabled 设置将其禁用。

WebRTC

WebRTC 通过简单的 API 为浏览器提供实时通信(RTC)功能。更多信息,请参阅WebEngineView.Feature 和 QWebEnginePage::Feature。

该功能可通过设置网络摄像头或麦克风,然后在简单浏览器纳米浏览器中打开https://test.webrtc.org/ 进行测试。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.