博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【笔记】给Qt内嵌一个Chrome吧
阅读量:6721 次
发布时间:2019-06-25

本文共 3769 字,大约阅读时间需要 12 分钟。

  hot3.png

给Qt内嵌一个Chrome吧

简述

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

参考

环境准备

Qt环境

  • Visual Studio 2010 (not Express edition) (详见)

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

CEF环境

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

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

参考

CEF编译

源码

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

解压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'。更多。

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 > 用到的命令行参数:
  • 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窗口:

直接参见改造后的工程。

参考

其他链接


部分Web引擎框架相关链接

C++

Qt

转载于:https://my.oschina.net/vaero/blog/208201

你可能感兴趣的文章
浅谈ES6中的扩展运算符 (三个点...)
查看>>
iOS WKWebView添加Cookie
查看>>
swift4.2 - 距离传感器
查看>>
【BZOJ】1086: [SCOI2005]王室联邦
查看>>
更新cocoapods 时遇到问题及解决
查看>>
MySQL必知必会总结(一)
查看>>
从零开始写一个 redux(第四讲)
查看>>
构造函数和析构函数
查看>>
转 思杰南京笔试
查看>>
Apache添加到windows服务和移除Apache的windows服务
查看>>
React Native 学习笔记(二)组件生命周期函数
查看>>
前端三大框架有哪些异同呢
查看>>
java IO 包源码解析
查看>>
CSS3 线性渐变(linear-gradient)
查看>>
学术休假-银行储蓄系统
查看>>
[CodeForces - 463B] Caisa and Pylons
查看>>
Java时间和时间戳的相互转换
查看>>
Java对象序列化与反序列化
查看>>
multiprocess(上)
查看>>
第43条:返回零长度的数组或者集合,而不是null
查看>>