给Qt内嵌CEF

作者: admin 分类: C++ 发布时间: 2014-06-18 14:09 ė10,138 浏览数 6没有评论
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)

 

目录[-]

给Qt内嵌一个Chrome吧

CEF简述

CEF(Chromium Embedded Framework),是一个用于开发Web浏览器控件的开源项目,其基于Google Chromium。

参考

  1. CEF:给客户端内嵌一个Chrome吧
  2. 理解WebKit和Chromium: Content API和CEF3
  3. CEF3笔记
  4. CEF中文教程

环境准备

Qt环境

下载,依次安装,尝试建立个Qt工程,运行ok即可。详见参考2

CEF环境

运行配置,详见参考3。不过,我并没有安装 Jun10 DX SDK 。

  1. 安装 VS10 SP1 ,是因为先前安装了VS2012,编译cefclient时,遇到了 ‘LINK : fatal error LNK1123′ 的问题,详见参考4
  2. 安装 Win8 SDK ,’..\Windows Kits\8.0\Include\winrt\asyncinfo.h’ 66行的 class 需要注释掉,参考3内有详细描述。(不安装,应该也能编译发布版的cef)

参考

  1. Visual Studio各版本下载合集
  2. QT4.8.5+qt-vs-addin-1.1.11+VS2010安装配置和QT工程的新建和加载
  3. Build Instructions (Windows)
  4. LINK : fatal error LNK1123

CEF编译

源码

cef3主分支源码,可以用TortoiseSVN来获取。不过,我用的是后一个发布版本。更多可见CEF Downloads

解压cef_xxx.7z,打开cefclient2010.sln,F5编译运行。

CEF for Qt

QMake编译

qmake来编译cef代码。这里新建Qt工程,再将cef代码移过来,进行工程配置。基本步骤如下:

  1. 新建Qt工程cefclient,Solution为’qcef’。
  2. 右键Solution,追加libcef_dll的Qt static lib工程。
  3. 右键Solution > Properties > Common > Dependencies,cefclient depends on libcef_dll。
  4. 配置工程的各输出目录,可修改配置有:
    • Project > Properties > Configuration .. > General: Output Directory, Intermediate Directory
    • Qt > Qt Project Settings > Properties: MocDirectory, RccDirectory, UicDirectory
    • VS C++开发时ipch、sdf的输出目录,可如下修改(严重洁癖症患者):
      • Tools > Options > Text Editor > C/C++ > Advanced > Fallback Location: Ture, True, Output Directory
  5. 复制cef的 Debug, Release, include, Resources 到Solution目录下。
    • Debug, Release为发布版cef给我们编译好的lib,include为头文件,Resources为其资源。
  6. libcef_dll的代码移过来,Show All Files > Refresh > Delete多余的 > Include所有代码。
  7. libcef_dll工程属性配置,之后编译。右键Properties > Configuration ..:
    • General > Character Set: Use Unicode Character Set
    • C/C++ > General > Additional Include ..: + ‘..’(上级目录), 或$(SolutionDir)
    • C/C++ > Preprocessor > Preprocessor Definitions: + ‘NOMINMAX, USING_CEF_SHARED’
  8. qcefclient的代码移过来,同libcef_dll一样,之后配置编译:
    • General > Character Set: Use Unicode Character Set
    • C/C++ > General > Additional Include ..: + ‘..’(上级目录), 或$(SolutionDir)
    • C/C++ > Preprocessor > Preprocessor Definitions: + ‘NOMINMAX’
    • Linker > Input > Additional Dependencies:
      • .\..\$(Configuration)\libcef.lib : cef的lib
      • .\..\out\$(Configuration)\lib\libcef_dll.lib : libcef_dll工程的lib
      • opengl32.lib : opengl的lib,或Qt Project Settings > Qt Modules勾选OpenGL library
  9. 输出目录缺少cef运行的必要dll等,需要把先前复制的cef的Debug或Release和Resources内的文件复制到输出目录。
    • 可以配置预执行命令,右键Properties > Configuration .. > Build Events > Pre-Build Event > Command Line:
      • xcopy $(SolutionDir)$(Configuration) $(SolutionDir)out\$(Configuration) /e /d
      • xcopy $(SolutionDir)Resources $(SolutionDir)out\$(Configuration) /e /d
      • 有不需要复制的文件,可将其名称放到一个文件里。然后在xcopy命令最后加exclude参数,如’/exclude:$(SolutionDir)exclude.list’。更多xcopy参数

cefclient for Qt

简单浏览遍cefclient的代码,如下:

  • binding_test.cpp
  • binding_test.h > 绑定测试:获取进程消息及其回复,与js通信。对应binding.html
  • cefclient.cpp
  • cefclient.h > 全局方法:cef全局方法,测试方法实现等
  • cefclient_osr_widget_win.cpp
  • cefclient_osr_widget_win.h > OpenGL渲染窗口组件
  • cefclient_win.cpp > 应用程序入口:初始化cef,建立windows窗口等
  • client_app.cpp
  • client_app.h > CefApp回调处理类:其被传递给了CefExecuteProcess(), CefInitialize()
    • 设计了浏览器委托和渲染器委托流程。后一测试有dom_test,performance_test。
    • 另有自定义协议注册,测试为scheme_test。
    • 这里也注册了js消息调用的扩展,app对象及其方法。
  • client_app_delegates.cpp
  • client_handler.cpp
  • client_handler.h > CefClient回调处理类:其被传递给了CefBrowserHost::CreateBrowser()
    • 设计了进程消息委托流程。测试包括binding_test, dialog_test, window_test。
  • client_handler_win.cpp
  • client_renderer.cpp
  • client_renderer.h > 客户端渲染委托:处理节点焦点事件
  • client_switches.cpp
  • client_switches.h > 用到的命令行参数:More Switches
  • dialog_test.cpp
  • dialog_test.h > 对话框测试:对应dialogs.html
  • dom_test.cpp
  • dom_test.h > dom元素选择测试:对应domaccess.html
  • osrenderer.cpp
  • osrenderer.h > OpenGL渲染器
  • performance_test.cpp
  • performance_test.h > V8性能测试:对应performance.html, performance2.html
  • performance_test_setup.h
  • performance_test_tests.cpp
  • resource.h > 资源头文件
  • resource_util.h > 资源工具:由名称获取字符串资源、由名称获取资源字节流
  • resource_util_win.cpp
  • scheme_test.cpp
  • scheme_test.h > 自定义协议测试:client://
  • string_util.cpp
  • string_util.h > 字符串工具:请求信息转为字符串、字符串替换
  • util.h > 一些断言宏:检验Cef当前线程类型
  • window_test.cpp
  • window_test.h > 窗口测试:对应window.html
  • window_test_win.cpp

然后,开始动手术,改造为Qt窗口:

直接参见改造后的工程qtcefclient

参考

  1. LNK2001: unresolved external symbol … QMetaObject …
  2. CEF3 – Bare Bones
  3. Qt决定将Web渲染引擎从WebKit改为Chromium

其他链接


部分Web引擎框架相关链接

C++

Qt



只回答业务咨询点击这里给我发消息 点击这里给我发消息

学习日记,兼职软件设计,软件修改,毕业设计。

本文出自 学习日记,转载时请注明出处及相应链接。

本文永久链接: https://www.softwareace.cn/?p=828

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


Ɣ回顶部

无觅相关文章插件,快速提升流量