qt cef嵌入web文章中已经讲述了怎么把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所示代码所用,保存代码如上图中有下划线部分。

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

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

qt cef嵌入web(二)的更多相关文章

  1. qt cef嵌入web

    原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium Embedded Fra ...

  2. qt添加cef库嵌入web [转]

    qt cef嵌入web 原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium ...

  3. QT中嵌入SDL

    原地址:http://www.qtcn.org/bbs/read.php?tid=23926 前段时间在做一个音视频编码板卡的PC跨平台程序,使用QT框架,其中有块功能是往QT里嵌入SDL,来播放YU ...

  4. Qt实现嵌入桌面的半透明窗口 good

    这儿用上了前面一文提到的函数findDesktopIconWnd().见: http://mypyg.blog.51cto.com/820446/263349 一.将Qt窗口嵌入到桌面中.声明一个最简 ...

  5. 两个基于C++/Qt的开源WEB框架

    1.tufao 项目地址: https://github.com/vinipsmaker/tufao 主页: http://vinipsmaker.github.io/tufao/ 介绍: Tufão ...

  6. 嵌入Web资源的方法

    可以将js .图片.css等嵌入Assembly中,这样就不用将文件在aspx中写了,特别适合做自定义控件的时候将控件用到的资源打包. 将文件放到项目的合适路径,比如jpg文件所在路径的namespa ...

  7. Xamarin.Android 嵌入web端界面

    在程序中嵌入Web端界面. 首先在前台界面上创建一个webview <android.webkit.WebView android:layout_width="match_parent ...

  8. Unity3d嵌入web网页

    应用场景 程序中的界面风格 UI内容等相关内容需要很容易方便的跟新替换,不使用unity传统的热加载方式,也不想使用和H5等做混合APP的时候, 就用嵌入web来实现. 假如我想替换某个背景图,一般来 ...

  9. Qt DLL总结【二】-创建及调用QT的 DLL(三篇)good

    目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...

随机推荐

  1. 学习使人快乐7--Mail收发原理+计划

    本篇了解邮件收发的原理与机制(smtp,pop3协议).不打算作重点学习辣~~~~~~~~~~~~~~~~ 日常感谢大佬gacl 另:打算把每周计划学的东西发在blog上面,勉励一下本咸鱼本周计划:1 ...

  2. hashTabel List 和 dic

    hashTabel  List  和 dic 原:https://www.cnblogs.com/jilodream/p/4219840.html .Net 中HashTable,HashMap 和 ...

  3. Vagrant 安装以及private_network配置

    (需先安装virtuabox,vagrant) 1.下载centos 7 镜像,vagrant box add ceshi 镜像名 或者是使用先前vagrant package出来的box,进行加载镜 ...

  4. native的详细用法

    目录 1.JNI:Java Native Interface 3.用C语言编写程序本地方法 一.编写带有 native 声明的方法的java类 二.使用 javac 命令编译所编写的java类,生成. ...

  5. 福州大学软件工程1916|W班 第6次作业成绩排名

    作业链接 团队第三次-项目原型设计 评分细则 博客评分标准 在随笔开头,备注小组同学的学号.(1') 文字准确.样式清晰.图文并茂.字数在1000字左右.(10') 原型模型必须采用专用的原型模型设计 ...

  6. Y1S002 xshell脚本编写示意

    SecureCRT可以自己录制脚本,非常的方便:但是考虑到CRT收费,所以不计划把CRT作为使用的终端. vbs脚本(test.vbs): Sub main xsh.Screen.Synchronou ...

  7. [jzoj]5478.【NOIP2017提高组正式赛】列队

    Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子.       前段时间,Sylvia 参加了学校 ...

  8. JS 存储

    1. 描述cookie ,sessionStorage 和 localStorage 的区别? cookie : 本身用于客户端和服务器端通信, 但是有本身存储的功能,就被‘借用’ 使用documen ...

  9. 开发中少不了的Fun -- 获取地址栏URL参数

    假设这是一个url地址 http://localhost:8080/a/b/c?a=1&b=2#abc,里面包含的部分: protocol: 'http:', // 协议 host: 'loc ...

  10. Golang的模块管理Module

    Golang 1.11版本终于支持了官方的模块依赖管理功能,1.11以前想要实现依赖管理只能够通过借助第三方库来实现,1.11以前的版本Golang项目必须依赖以GOPATH,从当前版本开始Golan ...