qt编译谷歌浏览器 qt做浏览器

各位老铁们,大家好,今天由我来为大家分享qt编译谷歌浏览器,以及qt做浏览器的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

qt编译谷歌浏览器 qt做浏览器

本文目录

  1. Qt嵌入浏览器(六)——QCefView实现JS通信接口
  2. Qt嵌入浏览器(五)——CEF入口与QCefView控件的使用
  3. 怎样安装Qt5.9

一、Qt嵌入浏览器(六)——QCefView实现JS通信接口

1、上一节中,我们完成了CEF各基本组件的封装,并完成了浏览器基本功能的实现。>>点这里回顾上节内容

2、本节我们将尝试扩展所实现的各组件,实现浏览器与页面的双向通信。

3、上一节曾提到过,CEF应用在默认情况下包含很多子进程,这些进程会共享同一个执行入口。除了主进程的各类处理接口外,CEF还提供了各类子进程的处理接口。而页面到浏览器的消息通道就可以借助对渲染进程的控制来实现,整体流程如下:

4、完成上述步骤后,在页面调用对应的消息通道函数时,V8处理器则会相应地进行处理,从而完成消息的发送。

5、另一方面,实现浏览器到页面的消息通道和第二节中基于Qt WebEngine的方法类似,CEF也提供了执行JS脚本的方法,只需在页面中定义好对应的消息接口,并通过执行脚本方法执行该接口即可完成消息的发送。

6、因此,实现双向通道主要的问题集中在针对渲染进程处理和JS脚本执行的扩展上。接下来先就渲染进程处理进行说明。

7、为了实现对渲染进程的处理,我们首先需要向上一节中封装的QCefContext中添加对渲染进程入口的解析和处理。具体实现如下:

8、上面的实现除了处理了CEF主进程外,还判断了子进程是否为渲染进程(Windows环境下的renderer进程和Linux环境下的zygote进程),如果发现当前处理的是渲染进程,则创建一个渲染进程处理器QCefRenderHandler的实例。QCefRenderHandler的声明如下:

9、和主进程CefApp的实现类似,这里也实现了CefApp接口,此外额外实现了CefRenderProcessHandler接口的OnContextCreated方法,来获取V8上下文的引用,具体实现如下:

10、上面的实现将sendMessage函数定义为消息通道,并注册到了window对象上。sendMessage函数的具体实现则放在v8Handler的实现中。QCefV8Handler声明如下:

11、 QCefV8Handler通过实现CEF V8处理器的Execute执行方法,完成对所加载的JS函数的过滤,并进行相应的处理,实现如下:

12、这里首先对函数名和参数进行了校验,之后调用CefBrowser的IPC方法SendProcessMessage向主进程的CefClient发送消息,从而完成页面向浏览器主进程消息的传递。

13、要实现页面到浏览器的消息通道,除了完成了上面渲染进程的控制扩展,我们还需要在QCefClient中添加接收IPC消息的接口实现。首先在QCefClient头文件中声明对CefClient接口的重载:

14、然后实现这个接口,完成消息的接收处理:

15、可以看到这里只是对收到的消息进行了简单的转换,并通过信号发送给感兴趣的下游控件使用。在第四小节的实现中,我们将QCefClient封装到了QCefView中,因此在QCefView中也需要将这个信号转发给它的下游控件:

16、这样,QCefView接收JS消息的通道就实现完成了。

17、这里额外讲解一下有关js alert的特殊处理。要实现js调用alert方法时的弹窗提醒,需要额外在CefClient中实现CefJSDialogHandler接口的OnJSDialog方法,参考实现如下:

18、承前所述,浏览器到页面的消息发送通过CEF的JS脚本执行接口实现。首先在QCefView中,声明并实现一个执行JS脚本的方法:

19、然后指定一个特定的JS方法,作为消息通道使用:

20、如此,QCefView发送JS的通道也实现完成了。

21、完成了消息通道的实现,接下来我们实际使用一下我们定义好的消息通道。

22、首先是Qt端的实现,在MainDlg的initWebView方法中,添加对JS消息的监听,并将监听到的消息通过QMessageBox显示出来:

23、然后添加文本输入和发送按钮,并在按钮点击信号对应的槽中调用QCefView的消息发送方法:

24、接下来在页面端实现消息接收和发送的接口msgutils.js:

25、可以看到这里我们使用了上面定义的recvMessage和sendMessage两个函数。然后在页面上调用这些接口:

26、实际运行一下浏览器,并加载我们实现的这个页面,消息发送效果如下:

27、有关CEF消息通道的讲解就先进行到这里。下一节将分析使用CEF接口实现Https双向认证的方法。

28、 [1] Chromium Embedded Framework官网

29、 [2] Chromium Embedded Framework官方教程

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

1、上一节中我们讲解了基于CEF浏览器开发的基本方法,并实现了QCefView控件和其核心组件QCefClient。>>点这里回顾上节内容

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

23、 [1] Chromium Embedded Framework官网

24、 [2] Chromium Embedded Framework官方教程

三、怎样安装Qt5.9

首先,Qt 5.9的安装包与之前相比,不再区分 VS版本和 MinGW版本,而是全都整合到了一个安装包中。因此,与之前的安装包相比,体积也是大了不少,以前是 1G多,现在是 2G多。

双击启动安装包之后,将会打开一个欢迎界面。在这里,直接点击“下一步”即可。

接着,会提示你登陆 Qt账户。这个 Qt账户对普通人来说没什么必要,所以直接点击下面的“Skip”跳过即可。

随后,便会弹出真正的开始安装界面,点击“下一步”。

在安装文件夹的界面,建议大家不要将 Qt安装在系统盘 C盘(比如我在此作了更改,将其安装到 D盘。当然,你安装在 C盘也是可以的),其他保持默认即可。继续点击“下一步”。

下面,就到了重点了。在选择组件界面,请务必要选对安装 Qt所需要的组件,否则你安装以后是无法正常运行的。

首先,点击各项前面的>箭头展开子项的内容。

在 Qt5.9一项中,如果你是使用 MinGW进行编译,请务必选中 MinGW模块。而如果你希望调用 VS的编译器进行编译,则需要勾选对应的 VS模块。当然,如果希望进行安卓开发,则安卓模块是少不了了。

至于其余的一些模块,则可以根据自身需要勾选。这里着重介绍下 Qt WebEngine和三个后面带TP的模块项。Qt WebEngine是谷歌开源的 Web浏览器引擎模块,而带 TP的模块则表示此模块目前是技术预览版。

我的建议是,如果你是初学,这些则可以不选。千万不要以为柿子西瓜一箩筐什么都选上是最好的,这样一来是增大存储空间,二来多多少少会影响 Qt运行时的速度,增加不必要的内存消耗。

下面,接着看工具项(Tools)的选择。

第一项是CDB的调试器,如果你仅使用 MinGW进行编译,则此项可以不选。

第二项虽然名字带 MinGW,但只是用于交叉编译的(交叉编译即在某一平台上编译用于其他平台的程序),如果用不到,也可以不选。

至于第三项,那是用于 Perl的。如果你电脑中本身没有安装 Perl,那是装不上的。

选择完成后,继续点击“下一步”。

接着,在打开的页面中勾选“我已经阅读并同意条款”(原文是英文)。然后,继续一路点击“下一步”,直到安装完成就可以了。

在安装过程中,可能会被个别安全软件误报,这时点击允许就可以了(警告:在允许之前,你应该确保你的安装包是从Qt官网下载的,并且知道自己在做什么)。

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

声明:信息资讯网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者东方体育日报所有。若您的权利被侵害,请联系 删除。

本文链接:http://www.gdxhedu.com/news/174081.html