今天在新电脑搭建qt开发环境,在运行程序时发现通过QWebEngineView显示的html失败,同样的代码在旧电脑上没有这个问题
分析过程
(1)qt出现如下信息提示
[21296:12076:0325/161831.084:ERROR:platform_handle_in_transit.cc(34)] DuplicateHandle failed: 拒绝访问。 (0x5)
这个错误表明 Chromium(QtWebEngine 的底层引擎)在尝试创建进程间通信(IPC)句柄时失败了,通常是由于 权限不足 或 进程冲突 引起的。
可能原因:
-
杀毒软件或防火墙 阻止
QtWebEngineProcess.exe
访问 IPC 句柄。 -
进程权限问题,可能是以
管理员
或普通用户
启动,导致QWebEngineView
的子进程无法正确继承权限。 -
MSVC 运行库问题,如果 QtWebEngine 依赖的
MSVC2017
运行库缺失或损坏,也可能导致这个问题。
(2)分析可能原因一
直接在qt上编译运行源代码,无法显示网页,在任务管理器中搜索QtWebEngineProcess.exe,
没有看到该程序在运行。
然后通过windeployqt打包该项目直接运行(没有通过管理员运行),发现网页能正确显示,并且任务管理器能看到 QtWebEngineProcess.exe
在运行
直接编译运行项目无法显示网页,而打包后的程序能够正常显示网页,这表明问题可能与 运行时的环境配置 或 资源加载路径 有关。
在 编译运行 时,QtWebEngine 需要加载特定的资源(如
QtWebEngineProcess.exe
等)。这些资源通常与程序的可执行文件分开,在打包后,这些资源被正确地包含在安装包中,因此能正常工作,而在开发环境中,可能由于路径配置不正确或某些资源缺失,导致无法加载网页。
所以要解决网页无法显示的问题,需要解决QtWebEngine 依赖资源路径问题
chatgpt给出的关于“解决QtWebEngine 依赖资源路径问题”解决方案如下:
-
确保 QtWebEngine 依赖文件被正确加载:
-
在开发模式下运行时,
QtWebEngineProcess.exe
和其他 QtWebEngine 资源需要位于程序的可执行文件同级目录,或者设置为在 Qt 配置文件中指定的正确路径。 -
你可以检查程序输出目录中是否包含 QtWebEngine 相关的 DLL 和进程文件。
-
然后自己先尝试通过配置qt的环境变量,但是发现没有起作用。最后通过以下方式来确保qt在运行时将QtWebEngine 所需的资源都能正确加载:
使用 windeployqt
工具:
-
Qt 提供了
windeployqt
工具,可以自动将应用程序所需的 Qt 库和插件复制到可执行文件目录。 -
在命令行中,导航到可执行文件所在的目录,运行以下命令:
-
-
windeployqt your_application.exe
-
这将自动将所有必需的 Qt 库和插件复制到当前目录。
总结:QWebEngineView显示网页失败的根本原因在于在qt运行时 QtWebEngine 所需的资源没有被正确加载,因为本人还没去深入了解使用QWebEngineView显示网页的全流程,可能是因为缺少了一个正式的添加 webenginewidgets模块的步骤导致所需资源没能被正确加载,因此只能通过这种方式手动添加资源到编译路径的exe同级目录下。