我有歼击机
上一节中,我们完成了CEF各基本组件的封装,并完成了浏览器基本功能的实现。 >>点这里回顾上节内容
本节我们将尝试扩展所实现的各组件,实现浏览器与页面的双向通信。
本篇的小目标:
上一节曾提到过,CEF应用在默认情况下包含很多子进程,这些进程会共享同一个执行入口。除了主进程的各类处理接口外,CEF还提供了各类子进程的处理接口。而 页面到浏览器的消息通道 就可以借助对 渲染进程 的控制来实现,整体流程如下:
完成上述步骤后,在页面调用对应的消息通道函数时,V8处理器则会相应地进行处理,从而完成消息的发送。
另一方面,实现 浏览器到页面 的消息通道和第二节中基于Qt WebEngine的方法类似,CEF也提供了执行JS脚本的方法,只需在页面中定义好对应的消息接口,并通过执行脚本方法执行该接口即可完成消息的发送。
因此,实现双向通道主要的问题集中在针对渲染进程处理和JS脚本执行的扩展上。接下来先就渲染进程处理进行说明。
为了实现对渲染进程的处理,我们首先需要向上一节中封装的QCefContext中添加对渲染进程入口的解析和处理。具体实现如下:
上面的实现除了处理了CEF主进程外,还判断了子进程是否为渲染进程(Windows环境下的renderer进程和Linux环境下的zygote进程),如果发现当前处理的是渲染进程,则创建一个渲染进程处理器QCefRenderHandler的实例。QCefRenderHandler的声明如下:
和主进程CefApp的实现类似,这里也实现了CefApp接口,此外额外实现了CefRenderProcessHandler接口的OnContextCreated方法,来获取V8上下文的引用,具体实现如下:
上面的实现将sendMessage函数定义为消息通道,并注册到了window对象上。sendMessage函数的具体实现则放在v8Handler的实现中。QCefV8Handler声明如下:
QCefV8Handler通过实现CEF V8处理器的Execute执行方法,完成对所加载的JS函数的过滤,并进行相应的处理,实现如下:
这里首先对函数名和参数进行了校验,之后调用CefBrowser的IPC方法SendProcessMessage向主进程的CefClient发送消息,从而完成页面向浏览器主进程消息的传递。
要实现页面到浏览器的消息通道,除了完成了上面渲染进程的控制扩展,我们还需要在QCefClient中添加接收IPC消息的接口实现。首先在QCefClient头文件中声明对CefClient接口的重载:
然后实现这个接口,完成消息的接收处理:
可以看到这里只是对收到的消息进行了简单的转换,并通过信号发送给感兴趣的下游控件使用。在第四小节的实现中,我们将QCefClient封装到了QCefView中,因此在QCefView中也需要将这个信号转发给它的下游控件:
这样,QCefView接收JS消息的通道就实现完成了。
这里额外讲解一下有关js alert的特殊处理。要实现js调用alert方法时的弹窗提醒,需要额外在CefClient中实现CefJSDialogHandler接口的OnJSDialog方法,参考实现如下:
承前所述,浏览器到页面的消息发送通过CEF的JS脚本执行接口实现。首先在QCefView中,声明并实现一个执行JS脚本的方法:
然后指定一个特定的JS方法,作为消息通道使用:
如此,QCefView发送JS的通道也实现完成了。
完成了消息通道的实现,接下来我们实际使用一下我们定义好的消息通道。
首先是Qt端的实现,在MainDlg的initWebView方法中,添加对JS消息的监听,并将监听到的消息通过QMessageBox显示出来:
然后添加文本输入和发送按钮,并在按钮点击信号对应的槽中调用QCefView的消息发送方法:
接下来在页面端实现消息接收和发送的接口:
可以看到这里我们使用了上面定义的recvMessage和sendMessage两个函数。然后在页面上调用这些接口:
实际运行一下浏览器,并加载我们实现的这个页面,消息发送效果如下:
有关CEF消息通道的讲解就先进行到这里。下一节将分析使用CEF接口实现Https双向认证的方法。
>>返回系列索引
[1] Chromium Embedded Framework官网 [2] Chromium Embedded Framework官方教程
撒旦情人518
目录 2 开发环境 1 3 开发工具 1 4 完成时间 1 5 设计思想 1 游戏的组成 1 游戏设计要点 1 游戏的主内容分析 2 初始排列方式的分析 2 游戏核心元素的分析 2 游戏操作的分析 3 游戏胜负判断的分析 3 6 设计过程及设计步骤 3 游戏总体设计 3 主场景 4 设置游戏主场景配置 4 设置背景图片 6 创建开始按钮 7 开始按钮跳跃特效实现 10 创建选择关卡场景 11 点击开始按钮进入选择关卡场景 12 选择关卡场景 13 场景基本设置 13 背景设置 14 返回按钮 16 创建选择关卡按钮 16 创建翻金币场景 17 翻金币场景 19 场景基本设置 19 背景设置 19 返回按钮 20 显示当前关卡 21 创建金币背景图片 22 创建金币类 23 引入关卡数据 26 添加现有文件dataConfig 26 添加现有文件 27 完成添加 27 数据分析 28 测试关卡数据 28 初始化各个关卡 29 翻金币特效 31 MyCoin类扩展属性和行为 31 创建特效 32 禁用按钮 34 翻周围金币 36 判断是否胜利 37 胜利图片显示 38 胜利后禁用按钮 39 音效添加 39 开始音效 39 选择关卡音效 40 返回按钮音效 40 优化项目 41 打包项目 42 绿色版本 42 标准版本 42 7 测试运行 43 主场景 43 选择关卡场景 43 翻金币场景 44 游戏胜利场景 45 8 评价与修订 46 9设计体会 48 参 考 文 献 49 附 录 50 致 谢 54 1 设计题目 基于QT实现的翻金币游戏 2 开发环境 硬件环境:微机系列,内存在1G以上 软件环境:Microsoft Windows 10家庭版 3 开发工具 Qt Creator 、HM NIS、NSIS(客户端打包程序) 4 完成时间 5 设计思想 游戏的组成 我认为游戏的组成主要是两个部分:游戏资源和游戏机制。 游戏资源泛指游戏中给用户提供的视听资源,比如游戏的场景,各种道具和角色的外观,游戏音乐,与用户进行交互的界面等。 游戏机制泛指游戏中实现游戏运作的方式,在翻金币小游戏中,怎么排列金币,如何翻转金币,如何判断游戏的胜利与失败,这种对于用户来讲相对隐式的存在却在游戏开发中占据核心地位。游戏机制的实现通常需要数据结构与相关算法的结合。 游戏设计要点 再设计游戏时,因为此项目窗口较多,因此在对于各个窗口的选择上是一个比较需要注意的地方。在初始化各种窗口的时候,是选择QMainWindow,Qwidget,还是QDialog类型呢?这个主要看该窗口的功能,如果作为主窗口(比如交互窗口,游戏窗口)存在的话,选择QMainWindow类型最合适,因为QMainWindow可以搭载工具栏和状态栏,这些功能选择组件在小游戏里面是很实用的(尤其是工具栏)。 至于QDialog则用于对话窗口,单方向地由软件向用户发送信息,一般不做交互,游戏的游戏说明,提示,警告都适合使用QDialog类型。 QWidget适合用来自定义组件,这次的项目中没有组合类的自定义组件,因此没有使用。该项目中自定义的是单个类型的组件(新的按钮),所以直接去继承QT里面的button类就可以了。
余文文214
基于qt的毕业设计,题目是可以有基于qt的KTV点歌系统的,这样子一个毕业设计以及毕业论文。
基于qt是可以去设计出很多东西的,也就是后缀要加上人们日常生活中可以常见到的东西,或者是技术性比较强的东西。
KTV点歌系统的话就是属于比较常见的东西。还有的题目可以是基于qt的嵌入式网络聊天系统的设计,这里也是一个很常见的网络聊天系统。
因为毕业设计最重要的还是要要与生活贴合,也就是可以去设计生活中常见的东西。还有的题目就是可以设计基于qt的点餐系统,qt的共享系统等等,可以设计的系统还有很多,不过最重要的还是需要导师认可。
杜邦财务分析毕业论文 杜邦财务分析体系(TheDuPontSystem)是一种比较实用的财务比率分析体系。以下就是我为你整理的杜邦财务分析毕业论文,希望你能喜欢
深度神经网络(DNNs)是 AI 领域的重要成果,但它的 “存在感” 已经不仅仅限于该领域。 一些前沿生物医学研究,也正被这一特别的概念所吸引。特别是计算神
蓄电能力。蓝牙音箱抗干扰主要设计蓄电能力内容。蓝牙音箱指的是内置蓝牙芯片,以蓝牙连接取代传统线材连接的音响设备,通过与手机平板电脑和笔记本等蓝牙播放设备连接,达
面试难度中等。毕业设计,是指工、农、林科高等学校和中等专业学校学生毕业前夕总结性的独立作业。是实践性教学最后一个环节。
关于桥梁钻孔灌注桩基础施工中的问题及防治措施理工论文 摘要: 分析了桥梁钻孔灌注桩基础施工中造成质量事故的影响因素,针对钻孔灌注桩施工方法,从钻孔、清孔、钢筋笼