背景
实现一个加载指定网址的客户端。客户端要支持网页的加载、跳转、下载、打印等功能。基本上类似于自己做一个浏览器客户端。综合比较了现在可以使用的一些库和方法,对比之后发现cef可以很好的满足所有的需求。cef的相关知识,可以查看上一篇文章。
cef源码编译
1.下载cef包。
cef的下载网址: “cef-builds.spotifycdn.com/index.html” (可以在输入框输入你要查找的版本号进行查找。)
点击链接下载到本地并解压。
这里选择的是windows32位的 cef_binary_89.0.18+gb36241d+chromium-89.0.4389.114_windows32.tar.bz2。
下载cef包时要注意编译环境是否支持。
cef 版本对应编译环境详细信息可以查看此链接:“blog.csdn.net/evesmith520…
2.下载并安装CMake工具。
CMake下载地址:“cmake.org/download/”
这里下载的是:
3.生成cef的.sln工程文件。
- 打开安装好的CMake工具。
- 选择加压好的cef文件夹目录。
- 选择生成目录。(在cef文件夹下创建一个build文件夹,如果没有自己创建,CMake会按照路径自动进行创建)
- 点击Configure。弹出配置窗口进行选项配置。
选择自己需要使用的VS的版本,系统的位数等信息。我这里用的是VS2017,生成32位的工程。选择好后点击Finish。
如果遇到Configure报红:
改为:
注意:这里的CMAKE_INSTALL_PREFIX的Value值最好选择不是C:盘的路径,可以带中文。因为如果是C:盘,则启动VS时可能需要选择管理员方式打开。
再次点击Configure:
- 点击Generate。 这时打印信息最后显示 Configuring done 和 Generate done 就表示成功了。
- 查看生成的工程文件。 在我们创建的build文件夹下会生成cef.sln等文件。
至此,cef源码生成完成。
4.VS打开cef工程进行全部编译。
注意: 为了避免cef工程编译失败,一定要在CMake阶段注意选择的VS的版本和系统位数的信息是否正确,如果不正确,那么这一步会导致失败。VS2017+Qt5.14.2的运行环境的配置可以在我之前的文章中找到,这里直接进行编译工作。
- 打开cef.sln工程。
- 点击选中ALL_BUILD,右键选择生成。
此时会编译失败。需要全局搜索"か",将CefString markedText("か")替换为CefString markedText(demo");
- 再次选中ALL_BUILD,右键选择清理,然后选择重新生成。
这时工程编译成功。
- 运行cefsimple查看运行结果。
需要将simple_app.cc文件中的代码 “www.google.com” 替换为 “www.baidu.com” 。
至此,cef工程编译完成。以上实现了cef库的编译运行,主要是为了生成我们嵌入cef模块时所需要的libcef_dll_wrapper.lib文件。
如果实在Qt Creator上创建的项目想要嵌入cef模块,那么还需要一个步骤。
- 生成动态链接库文件。
上面编译生成了libcef_dll_wrapper.lib静态库,默认使用的是MTd的链接方式,而Qt中常使用的是动态链接(即MDd),所以需要使用MDd的方式重新编译libcef_dll_wrapper.lib。
右键项目libcef_dll_wrapper->属性->C/C++->代码生成->运行库:改为“多线程调试 DLL (/MDd)”(如果是release版,则改为“多线程 DLL (/MD)”)。然后重新生成就可以了。
注意: Qt Creator创建的嵌入cef功能的项目,debug运行加载的页面是空白的(有问题),所以只能创建release版本。
所以这一步如果是VS创建的项目,则生成debug和release的lib库都可以。
如果项目是Qt Creator创建的,只能生成release版本的lib库才可以。
Qt Creator创建CefBrowserDemo
1.新建一个Qt项目。
这里将项目名称命名为CefBrowserDemo。这里实现了在Qt Creator创建一个项目,移植cefsimple到项目中。
2.将所需的cef文件添加到项目中。
所需的cef文件上面步骤已经生成好了。需要配置:
-
将cef目录下的include文件夹拷贝到项目.pro文件所在的路径中。
-
.pro文件路径下新建lib文件夹。将cef目录下的libcef_dll_wrapper.lib以及libcef.lib拷贝到新项目的lib目录下。
-
将cefsimple项目文件添加到.pro文件所在的路径下。
-
打开.pro文件,引入所需文件及路径。(红框框起来的部分都是必须要添加的)
-
因为项目的路径改变了,需要将代码中所有的#include "cefsimple/simple_handler.h"替换为#include "simple_handler.h"。
-
将VS打开的cefsimple项目中的cefsimple_win.cc文件里面的wWinMain函数中的内容复制到CefBrowserDemo的main.cpp的main函数中,并稍作修改。
这里去掉了有关cef_sandbox的相关内容。因为Qt Creator只支持动态库,而cef自带的cef_sandbox.lib是静态库,所以不能兼容。
- 还要将cefsimple demo运行目录下的文件拷贝到CefBroserDemo的运行路径下,除了cefsimple文件外,其余全部拷贝在QtWidgetCef的生成目录下。
这是cefsimple demo运行目录:
这是复制后的CefBroserDemo的运行目录:
至此,CefBroserDemo就可以编译运行成功了。
我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿。