博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt cef嵌入web(二)
阅读量:6117 次
发布时间:2019-06-21

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

在文章中已经讲述了怎么把cef页面嵌入到qt程序中,但是这样并不完美,因为如果需要在多个窗口上创建cef浏览器部件的话,在 消息监听部分没有办法做区分多个浏览器事件,在这篇文章中我将会把上一篇相关文章中的程序结构稍作改动,以支持多个主浏览器窗口,主要是针对不同的浏览器 产生事件时分发给不同的监听者,说到这儿,有的读者应该就能想到了,监听者肯定是一个数组了,而且 个数和浏览器数目一样多。

    在接着往一下看的时候,我默认大家都已经完成创建浏览器并可以成功监听事件。
    我先讲下思路:主要围绕每一个窗口创建一个浏览器,每一个浏览器同时又是一个监听者。当显示窗口的时候,创建浏览器,并把当前窗口的id和指针保存到 ClientHandler对象中,在浏览器创建成功并回调OnAfterCreated接口时,使用当前浏览器句柄匹配保存在 ClientHandler中的浏览器父窗口句柄,如果匹配成功,则把以监听者为键,以浏览器为值的简直对保存起来,这个键值对是作为后面libcef事 件回调时通知指定监听者的依据。
    上面的思路可能理解起来有点儿绕,接下来我直接上关键性代码,希望大家能更好的理解

typedef std::map ListenerHwnds; 

ListenerHwnds listenerHwnds_;//浏览器父窗口、监听者对

typedef std::map > ListenerBrowserMap;

ListenerBrowserMap m_MainBrowsers;//监听者、浏览器对

图1

图1是浏览器创建成功后的回调,在该方法中添加监听者/浏览器对到ClientHandler中,当浏览器发生事件回调的时候,调用指定的监听者

图2

图2的代码是设置是否进行加载,根据ClientHanlder中已经注册的监听者/浏览器对,把浏览器事件发送给指定监听者

图3

图3是有两个方法,方法1是保存监听者到CliendHandler对象中,在方法在浏览器创建之前调用;方法2是获取当前所有浏览器

图4

图3是创建浏览器代码,在调用CreateVrowser方法创建浏览器之前需要保存窗口句柄和指针到ClientHandler对象中,以备图1所示代码所用,保存代码如上图中有下划线部分。

    由于在上一篇相关文档中已经可以成功创建出浏览器,故这篇文章跳跃性比较大,如果有不理解的地方可以去看上一篇文章。

    至此,文章都是个人理解,有问题请留言

 

转载于:https://www.cnblogs.com/swarmbees/p/5621596.html

你可能感兴趣的文章
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
查看>>
while()
查看>>
常用限制input的方法
查看>>
Ext Js简单事件处理和对象作用域
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
12.通过微信小程序端访问企查查(采集工商信息)
查看>>
WinXp 开机登录密码
查看>>
POJ 1001 Exponentiation
查看>>
HDU 4377 Sub Sequence[串构造]
查看>>
云时代架构阅读笔记之四
查看>>