上一章使用qt自家的QWebEngineView实现浏览器,存在一定兼容性和稳定性问题:
https://blog.csdn.net/weixin_40355471/article/details/120698537
本章将使用开源的CEF(Chromium嵌入式框架)实现qt内嵌浏览器,包括CEF库libcef_dll_wrapper.lib的编译、QT下调用库实现内嵌浏览器。
编译环境:cmake-3.21.0-rc3+qt5.13.0+vs2017.
资源下载
cmake官网下载地址,选择Windows x64 ZIP版本:
https://cmake.org/download/
CEF是二次构建,下载源码包:
https://cef-builds.spotifycdn.com/index.html#windows32
我下载的是:cef_binary_85.3.12+g3e94ebf+chromium-85.0.4183.121_windows32.tar.bz2
CEF库libcef_dll_wrapper.lib的编译
资源下载后解压缩,使用cmake打开,选择源码路径和构建目录,点击configure选择vs2017,再点击generate生成vs工程文件。
在构建目录下生成了cef.sln文件,使用vs2017打开,构建libcef_dll_wrapper即可生成静态库libcef_dll_wrapper.lib,debug和release版本都可以构建。
(ps,libcef_dll_wrapper和cefsimple工程,属性-配置属性-C/C+±代码生成-运行库,debug模式下都选多线程调试(/MTd),release模式下都选择多线程(/MT))
cefsimple样例编译运行
构建生成libcef_dll_wrapper.lib后,编译cefsimple工程,在\build\tests\cefsimple\Debug\目录生成cefsimple.exe可执行文件,双击打开程序默认访问google网站(需要fq),打开源码中\cef_binary_85.3.12_windows32\tests\cefsimple\simple_app.cc文件,把默认访问网址修改为https://www.baidu.com,即可正常访问。
效果图
遇到的问题
1、C2440 “初始化”: 无法从“R (__cdecl *)(base::internal::BindStateBase *,conditional<_Test,const std::string&,const std::string&>::type)”转换为“PolymorphicInvoke” libcef_dll_wrapper
刚开始下载的CEF版本是:cef_binary_94.4.9+g09ee681+chromium-94.0.4606.71_windows32,使用这个版本编译libcef_dll_wrapper工程时会报这个错误,最后选择较稳定的版本(cef_binary_85.3.12+g3e94ebf+chromium-85.0.4183.121_windows32.tar.bz2),规避这个错误。
2、MSB3073命令“setlocal;c101008d Failed to write the updated manifest to the resource of file
编译cefsimple工程时,在debug模式下会报这两个错误,release模式不报错;
解决:项目-属性-配置属性-链接器-调试,把生成调试信息改为否,即可解决。