QT一步一步集成CEF
文章平均质量分 89
如何将CEF一步一步继承到QT窗体中,并封装成QT Widget
paopao_wu
这个作者很懒,什么都没留下…
展开
-
QT集成CEF13-实现JavaScript窗口间通信
本节利用CEF的进程间通信机制,实现在两个Renderer进程间,使用JavaScript进行通信。即实现两个窗口: MasterWindow 和 SlaverWindow,MasterWindow 使用JavaScript发送消息,SalverWindow监听处理消息。其实现思路为:Browser进程中创建两个窗口,MasterWindow,加载本地 index.html, SlaverWindow加载本地 slaver.html,并保存两个窗口对应的browser对象在 Browser进程的内存中原创 2021-12-27 18:36:38 · 1395 阅读 · 3 评论 -
QT集成CEF12-JavaScript监听文件夹与文件变化
QT集成CEF12-JavaScript监听文件夹与文件变化本节要实现的目标是: 监听本地磁盘文件变化:文件夹中新增文件文件夹中的文件被删除文件内容改变一旦发生这些变化,这些变化将作为“事件”发送给HTML网页,网页中JavaScript 注册的监听函数开始执行处理事件。其实本质上实现的就是Browser进程发送消息到Render进程, Render进程执行 JavaScript注册的回调函数,同时传递从Browser进程发送过来的消息内容,最终消息的内容在JavaScript回调函数中处理。原创 2021-12-25 11:09:24 · 1122 阅读 · 0 评论 -
QT集成CEF11-JavaScript与C++异步调用
在上一个章节《QT集成CEF10-JavaScript与C++互调》 中,JavaScript与C++之间已经能够相互调用了,但是它们只能在renderer进程中进行通信,不能跨进程通信。当JavaScript 也可以与renderer进行实现异步通信,可以参考上一章节中的sayHello 实现. 本章节将通过一个 使用JavaScript读取本地文本文件的案例来探索在CEF中如何实现JavaScript与C++之间跨进程的异步调用,关于CEF的进程间通信,在《QT集成CEF08-多进程通原创 2021-12-22 15:13:22 · 1695 阅读 · 0 评论 -
QT集成CEF10-JavaScript与C++互调
我们为什么要使用CEF? 很多情况下都是为了能够实现JavaScript与 native C++之间的相互调用。即网页中的JavaScript调用的时候,触发本地C++代码的执行,比如访问硬件等JavaScript无法完成的功能。本地C++代码也可以回调JavaScript,比如本地代码收到操作系统的一些通知后,将通知内容转交给JavaScript代码来执行。 CEF中,JavaScript代码是运行在Renderer进行中的,理解这一点非常重要,native代码写的地方不合适,JavaScript代码原创 2021-12-21 12:43:41 · 2489 阅读 · 2 评论 -
QT集成CEF09-本地网页解决跨域问题
我们使用QT与CEF集成的目的是为了编写HTML5应用展示应用界面,将这些界面存放在本地使用CEF加载到浏览器中呈现UI界面,应用中所用到的数据可以使用ajax与远程服务器进行数据通信或者直接在网页中通过JavaScript调用本地C++代码实现本地通信。本小节讲解CEF如何加载本地网页,并解决本地网页与服务端Ajax通信跨域问题(CORS)。至于JavaScript与C++代码的相互调用将在下一节中讲解。1. 本地网页 首先我们需要准备本地Html5文件(*.js, *.html, *.css,原创 2021-12-11 13:38:08 · 2599 阅读 · 0 评论 -
QT集成CEF08-多进程通信
通过上一个章节理解了CEF3 的多进程,即一个主进程,一般主进程是Browser进程,其他的分别是渲染进程(Renderer),GPU加速进程(GPU),插件进程(NPAPI或者PPAPI)。Browser进程:负责窗口管理,界面绘制和网络交互。Renderer进程:负责JavaScript的执行与DOM节点维护NPAPI插件进程:按需创建,每种类型的插件只会有一个进程,每个插件进程可以被多个Render进程共享;GPU进程:按需创建,最多只有一个,当且仅当GPU硬件加速打开的时候才原创 2021-12-08 16:47:42 · 1818 阅读 · 4 评论 -
QT集成CEF07-理解CEF多进程
本小节主要理解CEF的多进程模型,为后面的JavaScript与C++ 通信做一些知识储备,顺便再次梳理一下CEF的启动流程。任务管理器观察多进程CEF基于Chromium,是多进程模型。怎么理解多进程?启动一个Chrome浏览器,多打开几个网站,然后再打开资源管理器查看Chrome的进程,现在对任务管理器做一些调整,目的是查看每个进程所启动的命令行以及命令行所携带的参数。如下图:勾选 “PID”和“命令行”此时可以看到Chrome浏览器开启的进程:可以看到Chrome浏览器启动了多个进程,28原创 2021-12-07 18:39:57 · 2280 阅读 · 3 评论 -
QT集成CEF06-F12开启DevTools窗口
CefClient 类中提供了 GetKeyboardHandler() 的回调,要求在CefClient 中提供 CefKeyboardHandler 对象。这个对象可以用来响应键盘事件。 本节我们为应用添加F12 用来打开开发者工具(DevTools)F5 刷新页面class CefClient : public virtual CefBaseRefCounted { public: /// ...省略 /// // Return the handler for key原创 2021-12-07 14:20:18 · 1810 阅读 · 2 评论 -
QT集成CEF05-嵌入到QT窗体
回顾一下CEF 的浏览器窗口是如何创建出来的:SimpleApp实现了CefBrowserProcessHandler 接口CefBrowserProcessHandler 接口中有一个OnContextInitialized 回调,它在CEF创建 context 初始化完毕后被回调。SimpleApp 实现了OnContextInitialized 回调,代码如下:void SimpleApp::OnContextInitialized() { CEF_REQUIRE_UI_THR原创 2021-12-06 18:46:02 · 2845 阅读 · 5 评论 -
QT集成CEF04-使用QT消息循环
在 《QT集成CEF03-QT简单集成》中使用 CEF自己的消息循环,浏览器窗口也是CEF创建并显示。在QT应用中,QT有自己的消息循环,作为QT与CEF集成的第一步就是要解决消息循环的问题。 CEF可以不用它自己提供的消息循环,而与已经存在的程序中消息环境集成在一起。需要我们在设置CefSettings.multi_threaded_message_loop=true(Windows平台下有效) 下面对 main.cpp 进行改造。 开始前,保证QT 窗体文件存在, 这个窗体是自动原创 2021-12-06 12:24:32 · 1838 阅读 · 1 评论 -
QT集成CEF03-QT简单集成
使用 VS 2019 创建项目,在创建项目之前要先确保已经安装了 QT SDK 和 QT VS 插件。创建新项目的时候,选择 Qt Widgets Application准备CEF库上一个步骤中,已经编译好了 libcef_dll_wrapper 库,现在要在新的QT项目中使用这个库,需要做如下的准备。在解决方案目录下新建一个libs目录,用来存放第三方的库,目录结构如下:libs/cef/bin这个目录中存放的是 CEF运行的时候所需要的所有依赖文件(如 dll文件),分成了 d原创 2021-12-04 19:56:06 · 4122 阅读 · 6 评论 -
QT集成CEF02-编译libcef_dll_wrapper
进行这个步骤前,先完成 《QT集成CEF01-准备工作》准备新建一个文件夹,比如 e:\cef_win32,并在这个文件夹下创建一个 src目录,然后将下载的cef二进制包全部拷贝到这个目录中使用cmake打开cmake-gui.exe 在下载好的cmake文件夹中选择源码所在的目录E:/cef_win32/src 就是下载的cef所有的文件cmkae 编译以后生成的文件存放的目录E:/cef_win32 cmake运行后生成文件存放的目录执行cmake的 Co原创 2021-12-04 19:44:22 · 1994 阅读 · 2 评论 -
QT集成CEF01-准备工作
所有使用到的工具软件清单:CEF 二进制发行包下载地址,为了更具备通用性,本次编译的是 windows 32 bit , 版本为 cef_binary_91.1.22+gc67b5dd+chromium-91.0.4472.124_windows32cmake 编译工具下载官网: https://cmake.org/ ,本次使用 cmake-3.22.0-rc3-windows-x86_64.zipvisualstudio2019下载地址: https://visualstudio原创 2021-12-04 19:36:02 · 1454 阅读 · 0 评论