环境:win10,vs2017,qt5.14.2,cmake4.0.0
1.前言
QCefView依赖CefViewCore,CefViewCore依赖cef
QCefView源码地址:https://github.com/CefView/QCefView
CefViewCore源码地址:https://github.com/CefView/CefViewCore
查看cef各个版本需要的编译环境的地址:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md
cef各个版本的下载地址:https://cef-builds.spotifycdn.com/index.html
2.添加环境变量
新建环境变量QTDIR,值为qt目录,例如D:\Qt\Qt5.14.2\5.14.2\msvc2017_64,可以用refreshenv或者重启电脑刷新环境变量
3.下载代码
cef91以上的不支持vs2017,故选择【91.0.4472.164】版本
https://cef-builds.spotifycdn.com/cef_binary_91.1.23%2Bg04c8d56%2Bchromium-91.0.4472.164_windows64_client.tar.bz2https://cef-builds.spotifycdn.com/cef_binary_91.1.23%2Bg04c8d56%2Bchromium-91.0.4472.164_windows64.tar.bz2https://cef-builds.spotifycdn.com/cef_binary_91.1.23%2Bg04c8d56%2Bchromium-91.0.4472.164_windows64_client.tar.bz2
QCefView选择QCefView-v1.0.7版本,https://codeload.github.com/CefView/QCefView/tar.gz/refs/tags/v1.0.7
CefViewCore选择20230219版本,https://codeload.github.com/CefView/CefViewCore/zip/04338332c5467d64f3a6a4f3062720d214448726
解压QCefView-1.0.7.tar.gz
解压CefViewCore-04338332c5467d64f3a6a4f3062720d214448726(20230219).zip,并将解压后文件夹改名为CefViewCore,覆盖QCefView-1.0.7内空CefViewCore文件夹
拷贝cef_binary_91.1.23+g04c8d56+chromium-91.0.4472.164_windows64.tar.bz2至QCefView-1.0.7\CefViewCore\dep目录
修改CefViewCore文件夹下的CefConfig.cmake文件,将原来CEF_SDK_VERSION指向的版本的注释掉,新增行91.1.23+g04c8d56+chromium-91.0.4472.164
4.编译
回到QCefView-1.0.7目录,在cmd里执行generate-win-x86_64.bat,生成.build目录及QCefView.sln文件
用vs2017打开QCefView.sln,遇到一些编译错误如下
1>------ 已启动生成: 项目: CefViewCore, 配置: Debug x64 ------
1>CefViewBrowserClient.cpp
1>D:\Users\Administrator\Downloads\cef3\QCefView-1.0.7\CefViewCore\src\CefView\CefBrowserApp\CefViewBrowserClient.cpp(60): error C2039: “tolower”: 不是“std”的成员
1>d:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\unordered_set(19): note: 参见“std”的声明
1>已完成生成项目“CefViewCore.vcxproj”的操作 - 失败。
2>------ 已启动生成: 项目: QCefView, 配置: Debug x64 ------
2> Automatic MOC for target QCefView
2>mocs_compilation_Debug.cpp
2>QCefViewPrivate.cpp
2>D:\Users\Administrator\Downloads\cef3\QCefView-1.0.7\src\details\QCefViewPrivate.cpp(407): error C2039: “reset”: 不是“scoped_refptr<CefRunContextMenuCallback>”的成员
2>D:\Users\Administrator\Downloads\cef3\QCefView-1.0.7\CefViewCore\dep\cef_binary_91.1.23+g04c8d56+chromium-91.0.4472.164_windows64\include/base/cef_ref_counted.h(291): note: 参见“scoped_refptr<CefRunContextMenuCallback>”的声明
2>D:\Users\Administrator\Downloads\cef3\QCefView-1.0.7\src\details\QCefViewPrivate.cpp(422): error C2039: “reset”: 不是“scoped_refptr<CefRunContextMenuCallback>”的成员
2>D:\Users\Administrator\Downloads\cef3\QCefView-1.0.7\CefViewCore\dep\cef_binary_91.1.23+g04c8d56+chromium-91.0.4472.164_windows64\include/base/cef_ref_counted.h(291): note: 参见“scoped_refptr<CefRunContextMenuCallback>”的声明
2>D:\Users\Administrator\Downloads\cef3\QCefView-1.0.7\src\details\QCefViewPrivate.cpp(518): error C2039: “reset”: 不是“scoped_refptr<CefRunContextMenuCallback>”的成员
2>D:\Users\Administrator\Downloads\cef3\QCefView-1.0.7\CefViewCore\dep\cef_binary_91.1.23+g04c8d56+chromium-91.0.4472.164_windows64\include/base/cef_ref_counted.h(291): note: 参见“scoped_refptr<CefRunContextMenuCallback>”的声明
2>正在生成代码...
解决方法如下:
std::transform(
lower_url.begin(), lower_url.end(), lower_url.begin(), [](unsigned char c) { return std::tolower(c); });
==>
std::transform(
lower_url.begin(), lower_url.end(), lower_url.begin(), [](unsigned char c) { return tolower(c); });
osr.contextMenuCallback_.reset();
==>
osr.contextMenuCallback_ = nullptr;