在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中嵌入web网页的几种实现方式

    1.背景 Web网页的界面交互相比较Qt客户端而言有着比较大的优势:更加的多样化和更高的使用便捷性使得我们即使在客户端中也可以考虑将web网页嵌入到客户端的界面当中.如此便能将web的优势和客户端进行 ...

  2. Linux下Qt窗口半透明,Qt实现嵌入桌面的半透明窗口 good

    一.将Qt窗口嵌入到桌面中. 声明一个最简单的类: class Dialog : public QDialog {         Q_OBJECT public:         Dialog(QW ...

  3. qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面

    qt界面嵌入web 当我第一次听说WebAssembly以及使用Qt创建Web用户界面的可能性时(就像在普通C ++中一样),我决定更深入地研究该技术. 我的开源项目Pythonic完全基于Pytho ...

  4. 【小沐学C#】WPF中嵌入web网页控件(WebBrowser、WebView2、CefSharp)

    文章目录 1.简介 1.1 WPF简介 1.2 WPF 体系结构 1.3 WPF入门开发 2.WebBrowser 2.1 WebBrowser特点 2.2 WebBrowser常用的属性.方法和事件 ...

  5. Qt CEF融合技QCefView使用教程

    目录 QCefView介绍 QCefView编译准备 1 下载代码 2 修改CEF配置 3 修改Qt版本 开始编译QCefView 生成的dll路径 lib路径 头文件 QCefView项目说明 如何 ...

  6. Winform嵌入Web网页-CefSharp组件

    Winform嵌入Web网页-CefSharp组件 WebBrower组件是基于本地操作系统的IE浏览器的,CSS解析和兼容性不太友好,一般我们不推荐使用.这里我们采用的是CefSharp这个开源组件 ...

  7. Qt Creator构建Web应用程序

    Qt Creator构建Web应用程序 构建Web应用程序 要求 搭建开发环境 为WebAssembly设置Qt 启用WebAssembly插件 指定WebAssembly设置 添加WebAssemb ...

  8. 【Qt】数据库实战(二)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 连接到数据库 04. 操作结果集 06. 附录 01. 概述 SQL即结构化查询语言,是关系数据库的标准语言.前面已经在Q ...

  9. QT学习笔记(二):QT MinGW 和 MSVC 编译方式

    QT学习笔记(二):QT MinGW 和 MSVC 编译方式 Qt 中有两种方式编译:一种是MinGW ,另一种MSVC,是使用两种不同的编译器. 1.MSVC是指微软的VC编译器: 2.MingGW ...

最新文章

  1. 独家 | 一文读懂人工神经网络学习原理
  2. 看google三篇论文的感触
  3. LeetCode 237. 删除链表中的节点(思维)
  4. 前端错误日志上报相关实践
  5. 实例分解神经网络反向传播算法(转)
  6. 关于TensorFlow的MNIST数据集下载脚本input_data.py的坑
  7. 基础html的网页,[网页设计]HTML基础(五)——
  8. java graham_Graham Scan凸包算法
  9. 一款秒杀wireshark和burpsuite的国产网络分析神器,你还没用过?
  10. java自然语言处理_Java自然语言处理NLP工具包
  11. win10家庭版升级为专业版
  12. pic12f1823单片机入门_PIC单片机:如何建立PICKit3程序编写电路
  13. Testin云测:深耕企业应用服务
  14. JQuery 如何使用插件如何安装插件(详细讲解)
  15. Debugging connection was closed. Reason: WebSocket disconnected
  16. 关于java爬虫手机壁纸图片网站
  17. 电脑管理android手机版下载失败怎么办,腾讯手机管家PC版轻松解决Android文件管理难题...
  18. 【流媒体】Red5流媒体服务器开发总结
  19. 光伏窗性能研究(1)——光伏窗介绍
  20. java计算机毕业设计基于springboo+vue的医院挂号体检预约系统

热门文章

  1. cad2017怎么改变选择方式_CAD编辑对象选择的方法有哪些
  2. 同一Word文档不同尺寸(纸张)页面的混排方法
  3. Spring架构设计-增强MultiActionController
  4. vue路由切换和用location切换url的区别
  5. Vue2.x源码学习笔记-Vue实例的属性和方法整理
  6. 如何在单元测试中测试异步函数,block回调这种
  7. android引用另一个项目作为library错误
  8. bzoj1997 [HNOI2010]平面图判定Plana
  9. 多进程实现生产者消费者
  10. 「2018山东一轮集训」Game