
qt的webengine占用资源高、优化差、不支持h264的mp4直接播放,各种问题要解决,大多数问题都是要自己去下载webengine的源码下来进行修改编译才能解决,我的项目是跑windows平台的,干脆更换成微软的webview2直接解决一堆问题
1、支持msvc2019或者以上的qt5(安装qt5时把msvc勾选上,msvc要vs2019或者更高,因为微软webview2是从vs2019开始支持的)
2、Visual Studio 2019 或者更高的版本,工作负载安装C++桌面开发,就是win32开发的负载
1、访问微软webview2页面,进入到这个页面后点击文档

2、左边菜单列表选择 WebView2->平台和示例->Win32->Win32示例应用,进入这个页面后点击WebView2APISample进行下载示例项目,如图所示(这里要科学上网才好下载,不方便下载的可以在文章末尾提供的源码链接里边下载)

3、回到仓库源码根目录

4、下载整套完整示例代码

5、将下载后的代码解码

6、进入解压后的目录,使用vs2019加载WebView2GettingStarted.sln项目(WebView2GettingStarted就是官方给的案例,是一个非常最简单的webview2集成到项目的案例)

7、载入项目后,按照如图所示的操作,工具->NuGet包管理器->管理解决方案的NuGet程序包...

8、在打开的窗口中选择你想要集成的webview2版本进行和lib库进行更新(如图所示为Microsoft.Web.WebView2的切换版本方式,Microsoft.Windows.ImplementationLibr切换版本方式和Microsoft.Web.WebView2一样)

9、选择安装webview2版本和lib库的版本后,项目的目录下就会生成一个packages的文件夹,里边就是我们接下来要集成到qt的webview2开发库

1、创建qt程序,我这里创建了一个qmake的widget程序,使用的构建套件是msvc2019_x86,vs2019以上的msvc编译器只支持x64了,这里x86和x64的方法通用,你喜欢用多少位构建套件都行(这里说一下为什么要用msvc编译器,webview2是微软的,mingw是qt的,所以有些方法不匹配编译不通过,得用微软家的msvc才行,这个坑已经帮你们踩了,不要再去踩了)

2、引入webview2和lib库,在第三步获取webview2库中,我们得到了packages目录,把这个目录复制到qt的项目目录下

3、这里说一下packages目录中我们要用到的dll、头文件、lib,大家把我说的这些库文件复制出来就行,其他的文件都不需要了,之后按照自己习惯的分类进行管理就行了
(1)packages目录下的Microsoft.Web.WebView2.xx.xx.x目录中,只需要build->native目录下的4个文件夹(arm64、include、x64、x86),如图所示

(2)packages目录下的Microsoft.Windows.ImplementationLibrary目录中,只需要把include复制出来就行,如图所示

4、大家知道那些库是需要的就行了,我这里就不整理复制出来,就按照获取到的packages目录结构进行引入,如图所示为我所引入的头文件和lib库,lib库要注意和自己的程序匹配,我创建的qt程序是x86程序,所以我引入的lib库是x86的,你们根据自己的程序选择对应的lib就行

5、创建一个QWidget类,用来继承webview2,方便我们自定义一些功能和操作,如图所示为我创建的类,和创建后的头文件和cpp


6、参考官方给出示例进行代码编写,以下为类头文件和cpp的实现


7、以下是在主程序Widget中调用Webview2Dlg类的Widget.h和Widget.cpp示例


8、运行程序看看效果,点击窗口后会弹出新的窗口,这效果不是很理想啊,那就加个限制,创建新窗口时进行拦截,然后将让主窗口加载新的地址

9、网上直接搜webview2拦截新窗口,就能找到官方说明中的拦截事件add_NewWindowRequested,这个事件就是用来管理新建窗口用的,如下为官方文档描述和示例,这个示例代码在我们下载的WebView2Samples-main中的SampleApps里边就有,这里边包含了绝大多数官方的事件使用案例

10、按照官方的示例,在Webview2Dlg中添加该事件的实现,以下为添加后的Webview2Dlg.h和Webview2Dlg.cpp详情


11、再看看效果,这次都在一个窗口中加载了

如果发现程序能运行,没效果或者白屏,去webview2首页往下滚动就能看到下载,下载webview2运行时安装后即可解决问题

下图就是从仓库中下载的官方实例项目代码,GettingStartedGuides中就是很简单的集成示例,SampleApps中的项目就是拓展性的示例,例如下载拦截、前进后退、手势、缩放、和web通讯、注入js代码....等事件处理

链接:https://pan.baidu.com/s/1iwr5i8Y-omHIV_2MAuJw_Q?pwd=bili
提取码:bili
之后我找个时间录制个视频,把本次内容讲一遍梳理一下个大伙,B站消息我全屏蔽了,有疑问需要联系我发邮箱byteworld@foxmail.com,看到会回复!