Qt嵌入浏览器(五)——CEF入口与QCefView控件的使用

作者&投稿:岳秀 (若有异议请与网页底部的电邮联系)
~ 上一节中我们讲解了基于CEF浏览器开发的基本方法,并实现了QCefView控件和其核心组件QCefClient。 >>点这里回顾上节内容

先来回顾一下上一节中提到的CEF3应用整体结构:

其中第三条浏览器实例相关的实现在上一节中已经完成了,本篇我们将继续完成另一个核心组件QCefApp的开发,并通过实际使用QCefView,展示如何提供CEF初始化入口,最终完成浏览器核心功能和基本UI的开发。

本篇的小目标:

和CefClient类似,我们的应用程序需要提供一个CefApp的封装,来处理进程相关的回调——这里进程相关的回调对于我们要实现的简单浏览器而言,就是对浏览器进程本身的管理。因此,我们的QCefApp组件头文件声明如下:

和CefClient类似,CefApp也可以通过继承多个接口的方式实现进程级的各类管理。因为我们要实现的简单浏览器暂时不涉及太多复杂的管理,所以这里只简单实现了浏览器进程处理和上下文初始化的接口。同样和CefClient类似,对于CefXXXHandler接口,只需要将引用设为本实例,即可重载对应接口所提供的方法了。

额外说明一点:这里的创建浏览器进程方法里有一个添加ca证书的方法,目前先作为预留,有关ca证书和https的话题在之后的小节中会有专门的讲解。

浏览器上下文初始化、添加和关闭浏览器接口的具体实现如下:

通过上面的实现可以看出,添加浏览器实例进程实际上就是创建了一个QCefClient的引用,并将这个引用和浏览器相关的一些设置传入到静态方法CefBrowserHost::CreateBrowser中。而OnContextInitialized方法通过设置m_contextReady标志确保在创建浏览器实例时CEF上下文已初始化完成。

在完成CefApp组件的实现后,我们已经基本凑齐了启动CEF所需的零件。最后让我们来看看如何把这些零件借助CEF程序入口组装起来。

首先,声明一个QCefContext类,来封装CEF程序入口所需的基本设置和初始化方法:

其中,负责初始化CEF的initCef方法实现如下:

这个初始化方法包含了下面流程:

这里需要特别说明的是,CEF应用在默认情况下包含很多子进程(渲染进程、插件、GPU进程等等),这些进程会共享同一个执行入口。这里我们简单起见,仅就主进程进行处理——从上面的实现可以看到,当检测到当前进程为主进程时,创建一个CefApp的实例即可。这个实例的引用会通过cefApp()方法提供给需要获取CefApp的其他组件使用。

接下来我们来看看如何实际使用上面封装好的程序入口。

首先声明一个继承了QDialog的主窗口MainDlg:

在这个主窗口的构造方法中,会调用初始化QCefView的方法initWebview:

initWebview方法包含了QCefView界面布局相关的一些设置,这里我们略过这些实现,只专注于QCefView本身初始化的流程:

从上面的实现可以看出,这里我们只需要通过CefApp的添加浏览器方法获取QCefClient的引用,并将其提供给QCefView,就能简单完成QCefView控件的创建。

回到整个应用程序的入口,也就是main函数,除了传统Qt应用的实现之外,还需要添加一下CEF入口相关(也就是我们上一小节封装好的QCefContext)的实现:

至此,我们的浏览器应用初版终于完成了。运行一下看看效果:

本节所涉及到的组件及其流程可以总结为下面的时序图:

有关基于CEF的浏览器基本功能的实现,就讲解到这里了。下一节我们将介绍如何基于CEF实现浏览器与页面的互相通信。
>>返回系列索引

[1] Chromium Embedded Framework官网
[2] Chromium Embedded Framework官方教程


什么是嵌入式浏览器?具体的呢
嵌入式浏览器就是运行在各种嵌入式设备中的浏览器软件。嵌入式浏览器主要应用于手持终端和信息家电,例如掌上电脑、3G 手机、网络机顶盒、具有网络功能的其它家电,如可上网的电冰箱等,另外,在军事等领域也有一定的应用需求。其实功能上跟百度、360、星速这些浏览器没有什么太大的区别,主要就是内存和展...

登陆用友畅捷通T+ IE浏览器打不开也进不上了 求救!
→【确定】:方案七:修复IE浏览器1. 打开【电脑管家】→选择【软件管理】→点击【软件仓库】→输入"Internet Explorer"开始搜索→点击【修复】(IE8以下的版本可以直接点击【下载】):2. 安装时根据提示选择【我不想立即参与(O)】→点击【下一步(N)】→点击【我同意(A)】1. 不勾选【安装更新(...

Delphi开发嵌入式IE浏览器监控程序
嵌入式IE浏览器监控程序的实现主要包括监控程序的实现和维护程序的实现两部分,根据程序开发过程,可以将其分为四个步骤,下面分别对各个实现步骤进行详细介绍。1.实现COM对象 开发COM对象的任务就是建立一个能够与IE浏览器的MSHTML COM服务器建立连接并且通过接口回调实现控制功能的COM对象,具体实现过程如下:...

C#如何嵌入其他浏览器?
可以使用Setparent函数嵌入,可百度搜索“C# setparent”,参考下:http:\/\/blog.csdn.net\/xtfnpgy\/article\/details\/26591885 http:\/\/www.cnblogs.com\/format\/archive\/2009\/09\/23\/1572530.html

ie11浏览器win10版下载安装步骤
1、从此站点下载ie11浏览器的win10版本安装软件包。2、双击执行安装包,将弹出安装确认页面,如图所示 6、单击安装开始执行,安装完成后将提示计算机重新启动,如图所示 IE11浏览器(Internet Explorer 1 1)和类似软件之间的比较 IE11浏览器(Internet Explorer 1 1)支持最新的网络标准和技术。这是一种...

win10系统自带浏览器Adobe Flash Player Edge(嵌入式 - Windows 10...
用windows update更新来安装

用江民查毒完后,提示有个进程是一般可疑,(浏览器嵌入)是什么意思?
示有个进程是一般可疑,你把这个进程的[名字.exe]在百度[网页项]上查找可查出其介绍来 浏览器嵌入:一些第三方软件能嵌入浏览器,像3721,中文上网一类

不知道为什呢电脑突然变成这个样子了 在浏览器按t就给我变成了有t的...
大部分的浏览器本身支持除了HTML之外的广泛的格式,例如JPEG、PNG、GIF等图像格式,并且能够扩展支持众多的插件(plug-ins)。另外,许多浏览器还支持其他的URL类型及其相应的协议,如FTP、Gopher、HTTPS(HTTP协议的加密版本)。HTTP内容类型和URL协议规范允许网页设计者在网页中嵌入图像、动画、视频、声音、...

哪个浏览器最好用(推荐浏览器排名及特点)
1.下载安装Safari浏览器。2.打开Safari浏览器,在地址栏输入需要访问的网址。3.在浏览器中可以使用鼠标中键打开新标签页,也可以使用Ctrl+T快捷键打开新标签页。五、Opera浏览器 Opera浏览器是一款快速、安全的浏览器,其特点如下:1.速度快:Opera浏览器采用了多进程的架构,可以更好的利用计算机的资源...

j2me怎样在软件中嵌入默认浏览器
MIDlet webClient = new WebClient();try { webClient.platformRequest(“http:\/\/wap.ucweb.com\/”);} catch (Exception ex) { System.out.println("不支持调用自带浏览器");} 调用浏览器!不会退出程序!想要将浏览器嵌入到J2ME中就得同上啦!!

大新县15979078182: 如何在Swing中嵌入浏览器 -
春骨舒目: 可以到官方网站上下载相应的包,下面大致说明一下如何运用它的三方包,实现在Swing中嵌入浏览器. 该文章只说明Swing中嵌入浏览器这一个问题,解决该问题需要3个第三方库文件,jdic.jar、jdic.dll、IeEmbed.exe. jdic.jar是Java程序需要引...

大新县15979078182: Qt中怎样把windows目录浏览器嵌入界面中 -
春骨舒目: 搜狗浏览器不是用的“编辑”这个词来描叙你说的那些IE浏览器里面的功能,你在浏览器上方点击右键选择“查找栏”就出现了,这样就可以查找文字了.搜狗浏览器快捷键:查找CTRL+F复制CTRL+C粘贴CTRL+V剪切CTRL+V

大新县15979078182: QT application中嵌入html页面 使用什么类 -
春骨舒目: 如果你能在vc中使用cef的话,那么可以使用同样的方法在qt中嵌入cef.

大新县15979078182: Qt如何嵌入Flash,并进行交互 -
春骨舒目: 使用Qt的浏览器接口,系统装有flash插件自然就可以显示了.如果是X86平台,可以直接使用flashplayer插件.如果嵌入式平台,估计要与adobe公司合作,需要他们提供插件.基于Qt的 webkit我还不清楚是否支持flashplayer插件,需要验证一下.firefox下是可以支持的.可以参考firefox中对插件的支持.也可以考虑使用WebKit,在里面使用Flash.

大新县15979078182: Qt 做的界面 , 现在需要嵌入到html里边去,用户访问的时候通过下载一个插件..见下文
春骨舒目: 这是一个很复杂的工作,如果是浏览器相关的东西,你可以到Qt助手中去查找WebKit in Qt. 如果要做成插件的话可以在QT助手中去查找 Plugin Classes .

大新县15979078182: 如何在WINFORM中嵌入支持HTML5的浏览器 -
春骨舒目: 用CEF,VS里nutget 搜 cef就行,

大新县15979078182: 如何利用 QT 进行 web 与本地混合应用开发 -
春骨舒目: 如何利用 QT 进行 web 与本地混合应用开发是本文要讲述的内容,Qt提供了本地 C++对象与JavaScript的无缝集成,是进行本地与web混合应用开发的理想平台.一、Qt Webkit 集成 利用Qt的Webkit 集成与QtNetwork模块,你完全可以进行本地...

大新县15979078182: QT的QWebEngine+QNetWork能不能实现内嵌抓包的浏览器程序 -
春骨舒目: 还是用WebChannel吧,还得是基于WebSocket的.基于IPC的WebChannel目前在CodeReview阶段,估计要在Qt 5.5中才正式提供.另外,WebChannel之外的其它更方便的(至少像WebKit一样)在JS和C++之间互操作,也得等下一个版本了.

大新县15979078182: QT怎么把别的exe程序嵌入到自己的窗口中 -
春骨舒目: etProgram(sProgram); pProcess->start(); qint64 lID = pProcess->processId(); QWindow* window = QWindow::fromWinId(lID); QWidget* widget = QWidget::createWindowContainer(window, this, Qt::Widget); widget->show(); 我自己写的一段代码,

大新县15979078182: 怎么把网页内容放进QT呢 -
春骨舒目: 在2012年7月19日以前的QT版本中,用特殊方式插入,QT中是可以显示网页的;但现在QT版本更新,把QT视频框架这个漏洞堵住了,现在QT视频中可以用两种格式:① Flash 文件 ② 图片文件假如,你需要把网页写进QT,就需要先把网页做成Flash网站,并且要整合在一起 写进QT , 还有疑问、或者想交流此方面内容请进入 联盟技术交流平台 查看原帖>> 希望采纳

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网