上一篇我们编译了vs2017版本的Cef3,记得那一步的需要修改成/MD,编译出Debug版本和Release版本。
我们还是以cef_binary_75.0.1+gb5e74dd+chromium-75.0.3770.80_windows64.tar.bz2这个版本为准。(原因见上一篇博客)。
我们修改simple_app.cc中的url为"http://www.baidu.com",否则会发现打开cefsimple.exe时半天显示不了网页。(原链接为"http://www.google.com",不科学上网,半天出现不了。)
我们以编译的x64 Release版本为例:
在VS2017中,设置cefsimple为启动项目,或者在在build文件夹下,双击cefsimple.exe打开。
注意观察这个目录的文件结构。
在CMake的输出窗口可以看到:
我把它稍微排版了一下:
CEF Binary files:
chrome_elf.dll;
d3dcompiler_47.dll;
libcef.dll;
libEGL.dll;
libGLESv2.dll;
natives_blob.bin;
snapshot_blob.bin;
v8_context_snapshot.bin;swiftshader
CEF Resource files:
cef.pak;
cef_100_percent.pak;
cef_200_percent.pak;
cef_extensions.pak;
devtools_resources.pak;
icudtl.dat;
locales
这些都是我们将来编译的exe同级目录中需要的文件,有CEF二进制文件和CEF资源文件。
运行效果:
我们现在将把这个例子在Qt中实现出来。
我们新建一个Qt Widgets Application工程,保留ui文件。
就是一个布局加一个QWidget,命令为contentWidget
新看看工程的目录结构
这个include文件夹就
lib存放我们编译出来的Debug版本库和Release库
其实我们编译的时候
这个cef_sandbox.lib在我们这个demo中用不到。
cef.pri是我们建立的一个文本文件,内容:
INCLUDEPATH += $$PWD
INCLUDEPATH += $$PWD/include
win32:CONFIG(debug, debug|release) {
LIBS += $$PWD/lib/debug/libcef.lib \
$$PWD/lib/debug/libcef_dll_wrapper.lib \
user32.lib
}
else:win32:CONFIG(release, debug|release) {
LIBS += $$PWD/lib/release/libcef.lib \
$$PWD/lib/release/libcef_dll_wrapper.lib \
user32.lib
}
这样我们就可以Debug版本和Release版本分别链接不同的lib库。
把vs工程中的
simple_app.h
simple_app.cc
simple_handler.h
simple_handler.cc
都拷贝到Qt工程中
注意修改:
在simple_handler.h中添加getCefBrowerList函数
simple_handler.cpp中添加函数定义:
std::list<CefRefPtr<CefBrowser> > SimpleHandler::getCefBrowerList()
{
return browser_list_;
}
simple_handler.cc中有些地方需要注释掉,我们看看这个文件的全部代码:
// Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.
#include "simple_handler.h"
#include <sstream>
#include <string>
#include "include/base/cef_bind.h"
#include "include/cef_app.h"
#include "include/views/cef_browser_view.h"
#include "include/views/cef_window.h"
#include "include/wrapper/cef_closure_task.h"
#include "include/wrapper/cef_helpers.h"
namespace {
SimpleHandler* g_instance = NULL;
} // namespace
SimpleHandler::SimpleHandler(bool use_views)
: use_views_(use_views), is_closing_