上海工业网站建设,网站开发哪家便宜,wordpress多站列表,wordpress 培训机构QT WebEngine
官方文档
WebEngine 架构#xff1a; 能看到 WebEngine 有一个核心模块是基于 Chromium 构造的#xff0c;通过使用 Chromium 的Blink渲染引擎和V8 JavaScript引擎来处理和渲染Web内容#xff0c;并将这些底层技术封装为一系列高级的C类和接口#xff0c;以…QT WebEngine
官方文档
WebEngine 架构 能看到 WebEngine 有一个核心模块是基于 Chromium 构造的通过使用 Chromium 的Blink渲染引擎和V8 JavaScript引擎来处理和渲染Web内容并将这些底层技术封装为一系列高级的C类和接口以便开发者可以将Web内容嵌入到Qt应用程序中。
WebEngine Widgets 模块主要是针对于桌面应用提供了用于将Web内容嵌入到Qt应用程序中的窗口和小部件, 可以用于各种应用程序来加载web内容。
主要架构如上图所示主要提供了一些组件:
QWebEnginePage一个代表Web页面的类它包含了页面的内容、状态和功能。它可以执行JavaScript代码、处理表单、捕获页面截图等。QWebEngineView一个用于展示Web页面的小部件它是QWebEnginePage的可视化容器。它可以加载URL、导航历史、缩放页面等。QWebEngineProfile一个表示浏览器配置文件的类它包含了缓存、Cookie和安全策略等设置。它可以用于实现多用户浏览器或隐私浏览功能。QWebEngineSettings一个表示浏览器设置的类它包含了字体、颜色、JavaScript和插件等选项。它可以用于调整页面的渲染效果和功能。QWebEngineScript执行 JavaScript 脚本的类用于向网页中注入并执行自定义的 JavaScript 脚本来添加新功能或修改现有的功能。QWebEngineHistory管理浏览历史的类它提供了对浏览历史记录的访问和操作其中每个历史记录项都由 QWebEngineHistoryItem 类表示。WebEngineAction表示对网页的操作由WebEngineView::action()方法返回包含相关的一些信息
一个QWebEngineView 实例有一个 QWebEnginePage. QWebEnginePage有一个QWebEngineHistory和一些用于操作页面的QAction对象。每一个QWebEnginePage都属于一个QWebEngineProfile, QWebEngineProfile有一个页面设置的QWebEngineSettings, 一个在页面上运行脚本的QWebEngineScriptCollection, 一个访问HTTP cookies的QWebEngineCookieStore。 WebEngine 模块主要是针对用于QML。 Qt WebEngine 除了没有单独访问的web引擎页面包含的其他组件与Qt WebEngine Widgets相同功能也是一致的。 WebEngine Process这是可执行文件对应的是一个独立的用于渲染网页和执行JavaScript进程用于增强安全性与内存隔离。 网上有文章说“每个QWebEngineView或WebEngineView实例都会启动一个QtWebEngineProcess.exe进程”在View对象过多的情况下会导致内存占用 但是在官方文档里没有找到相关描述这个问题暂时未能确定 WebEngine 对 AMD 显卡支持性不好在某些A系显卡下会显示不出来甚至闪退 后续优化计划目前还没在网上搜到另外嵌入的网页无法播放视频要播放视频的话需要下载QT源码自己设置编译参数集成视频播放库 对显卡有依赖基于openGL看网上说如果在显卡和显卡驱动不一致或是旧版版本下还有openGL程序有可能出异常
QT 与 网页通信
通过 WebEnginePage 与网页通信 通过 WebEngine 嵌入网页的方式与网页端的JS交互很容易QWebEnginePage 自带了一个函数为 runJavaScript 这个函数可以直接通知 JS 执行指定的函数 void QWebEnginePage::runJavaScript(const QString scriptSource, const std::functionvoid (const QVariant ) resultCallback)例如这个接口第一个参数就是要调用的接口以及参数拼成的字符串第二个参数是对应的回调。 这种方式用起来很方便但是是单向的
QWebChannel 双向通信 QT提供了一种通道机制可以让 JS 与 QT 通过对象建立连接 然后进行通信 QWebChannel 提供了在 QT 和 HTML/JS 之间点对点的通信能力通过向 HTML/JS 端的 QWebChannel 发布 QObject 的 派生对象进而实现在 HTML/JS 端可以同步读取来自 Qt 端的 公共插槽 和 QObject 的 属性值 和 方法。在整个通信过程中无需任何手动序列化传入的参数。所有 Qt 端的数据更新都会自动且异步的触发 signal 并更新到 client 端。这个机制一般被称为对象模型QObject 是这个模型的核心而模型实现的基础就是靠的 QT 的 signal 和 slot 也就是信号槽机制。
这个机制主要分以下几步
QT端 创建 HTML/JS 网页JS端 创建 channel 对象通过 channel 取到通信对象 QObject;QT端 创建 channel 对象与通信用的 QObject 对象QT端 channel 与 网页对应的 QWebEngineView 绑定QT端 将 channel 与 QObject 对象绑定QT端/JS端 修改QObject属性另一端对应的监听函数响应 WebEngine 网页示例
源码见 QTWebtest_WebEngine 在示例代码里我写了一个中间类名为 JS2QTBridge 里面定义了两个字符串 m_jscontent 与 m_content 通过 channel 将这个对象对 JS 与 QT 双向绑定网页/QT界面上显示内容发生改变时给 QT/JS 发送对应信号实现效果如
其中在QT上点击按钮通知网页画图是用 runJavaScript 方法实现 在网页点击饼图在QT弹出提示是通过调用 bridge 对象的函数实现 两边输入框修改另一侧的显示区域一同变化是通过对 bridge 对象的成员变量与界面控件信号槽绑定实现
QT cef
CEF3使用多个进程运行。处理窗口创建、绘制和网络访问的主要进程称为浏览器进程通常与宿主应用程序的进程相同大多数应用程序的逻辑将在浏览器进程中运行。使用Blink引擎渲染HTML和JavaScript在单独的渲染进程中相关的应用程序逻辑如JavaScript绑定和DOM访问将在渲染进程中运行。默认进程模型将为每个唯一源地址schemedomain运行一个新的渲染进程。其他进程将根据需要生成例如处理Flash等插件的插件进程和处理加速合成的GPU进程。另外浏览器进程中会进行窗口绘制不是绘制HTML内容而是承载网页内容的那个窗体渲染进程则不会用来创建窗体。
-- 编译CEF参考 cef.md – cef解决方案中有多个工程
ALL_BUILD与ZERO_CHECK是cmake自动生成的辅助工程。cef_gtest与ceftests都是测试模块,这里不关心。cefclient一个包含CEF各种API演示的浏览器程序Demo。cefsimple一个简单的CEF浏览器程序Demo。libcef_dll_wrapper对libcef库的C代码封装。上述cefclient与cefsimple都会用它。
可以移植 cefsimple 来实现一个简单的浏览器程序
simple_app.h、simple_app.cc、simple_handler.h、simple_handler.cc 这四个文件拷到QT工程中simple_handler.h中的 PlatformTitleChange 定义注释掉simple_handler.cc 的 OnTitleChange 对这个函数的调用也注释掉CEF.lib等相关库 以及 libcef_dll_wrapper.lib 拷贝到工程中链接到QT工程里CEF的include文件夹拷贝到QT工程位置并引入CEF的 Resources 中的五项拷贝到QT编译出来的EXE的环境里这些是网页渲染引擎需要的资源不打包过去程序运行时会报错icu_util.cc(224)] Invalid file descriptor to ICU data received.
QT 与 CEF 嵌入的网页通信有两种方式
1. 使用 QWebChannel
这种方法与上面使用 webengine 时类似, 在QT 与 JS中声明channel, 通过将这个channel对象来作为中间通信的桥梁 这种方式有一个优点是可以通过 websocket 来让 Channel 监听指定的IP和端口来实现远程通信而不仅仅局限于QT与它启动的web子进程
2. 通过 CefRenderProcessHandler 的方法回调传递 virtual void OnWebKitInitialized() {} 当 webkit 初始化完毕之后。在这个函数中可以通过 CefRegisterExtension() 函数来注册JavaScript与C代码之间的“映射”关系官方管这种方式叫做扩展(Extension) virtual void OnContextCreated(CefRefPtr browser, CefRefPtr frame, CefRefPtr context) {} JavaScript 上下文被创建以后在这个函数中可以为JavaScript中的 window 对象绑定属性和方法官方将这种方式叫做 窗口绑定(window binding)
3. CEF网页通信示例
源码见 QTWebtest_CEF 在示例代码里我写了一个网页将这个网页用CEF展示在了QT窗口中然后另外打开了一个QT对话框 通过 channel 来在网页与对话框之间发送信息展示效果如下
CEF使用的一些问题 不支持视频需要自编译源码原生的CEF是纯C代码libcef_dll_wrapper才是在CEF的基础上封装的C API 很大我使用的版本的 libcef.dll 164MB libcef_dll_wrapper.lib 33MB 还有一些相关的加一起超200MB MD/MT属性支持的不好CEF工程默认使用的是MT其中用到的一些依赖库如cef_sandbox.lib都是MT编译的使用MD编译会报错要是改成MD需要自己下载相关源码编译 多进程架构WebEngine应该是一个view一个进程如果只有一个view然后路径切换不会增加新的进程CEF应该是每打开一次网页就会创建一个渲染进程 文章转载自: http://www.morning.rhqn.cn.gov.cn.rhqn.cn http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn http://www.morning.bydpr.cn.gov.cn.bydpr.cn http://www.morning.lmfmd.cn.gov.cn.lmfmd.cn http://www.morning.slqzb.cn.gov.cn.slqzb.cn http://www.morning.rqjl.cn.gov.cn.rqjl.cn http://www.morning.okiner.com.gov.cn.okiner.com http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn http://www.morning.tzjqm.cn.gov.cn.tzjqm.cn http://www.morning.tyklz.cn.gov.cn.tyklz.cn http://www.morning.fkyqt.cn.gov.cn.fkyqt.cn http://www.morning.fqtdz.cn.gov.cn.fqtdz.cn http://www.morning.rtqyy.cn.gov.cn.rtqyy.cn http://www.morning.c7498.cn.gov.cn.c7498.cn http://www.morning.xgkxy.cn.gov.cn.xgkxy.cn http://www.morning.cpmwg.cn.gov.cn.cpmwg.cn http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn http://www.morning.dywgl.cn.gov.cn.dywgl.cn http://www.morning.zlfxp.cn.gov.cn.zlfxp.cn http://www.morning.kltsn.cn.gov.cn.kltsn.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn http://www.morning.rcfwr.cn.gov.cn.rcfwr.cn http://www.morning.pbwcq.cn.gov.cn.pbwcq.cn http://www.morning.hsjrk.cn.gov.cn.hsjrk.cn http://www.morning.wplbs.cn.gov.cn.wplbs.cn http://www.morning.kndyz.cn.gov.cn.kndyz.cn http://www.morning.mzgq.cn.gov.cn.mzgq.cn http://www.morning.nzkkh.cn.gov.cn.nzkkh.cn http://www.morning.tlbdy.cn.gov.cn.tlbdy.cn http://www.morning.mgkb.cn.gov.cn.mgkb.cn http://www.morning.nkdmd.cn.gov.cn.nkdmd.cn http://www.morning.hrtwt.cn.gov.cn.hrtwt.cn http://www.morning.fllx.cn.gov.cn.fllx.cn http://www.morning.wmlby.cn.gov.cn.wmlby.cn http://www.morning.rzysq.cn.gov.cn.rzysq.cn http://www.morning.cldgh.cn.gov.cn.cldgh.cn http://www.morning.fcwxs.cn.gov.cn.fcwxs.cn http://www.morning.lbssg.cn.gov.cn.lbssg.cn http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn http://www.morning.qqtzn.cn.gov.cn.qqtzn.cn http://www.morning.tdcql.cn.gov.cn.tdcql.cn http://www.morning.xywfz.cn.gov.cn.xywfz.cn http://www.morning.synkr.cn.gov.cn.synkr.cn http://www.morning.zpfr.cn.gov.cn.zpfr.cn http://www.morning.jopebe.cn.gov.cn.jopebe.cn http://www.morning.wclxm.cn.gov.cn.wclxm.cn http://www.morning.bdkhl.cn.gov.cn.bdkhl.cn http://www.morning.xlztn.cn.gov.cn.xlztn.cn http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn http://www.morning.nkqrq.cn.gov.cn.nkqrq.cn http://www.morning.jbshh.cn.gov.cn.jbshh.cn http://www.morning.dqdss.cn.gov.cn.dqdss.cn http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn http://www.morning.qblcm.cn.gov.cn.qblcm.cn http://www.morning.lmmh.cn.gov.cn.lmmh.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn http://www.morning.kxqwg.cn.gov.cn.kxqwg.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.brwwr.cn.gov.cn.brwwr.cn http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn http://www.morning.trfrl.cn.gov.cn.trfrl.cn http://www.morning.krklj.cn.gov.cn.krklj.cn http://www.morning.dxhnm.cn.gov.cn.dxhnm.cn http://www.morning.ldzxf.cn.gov.cn.ldzxf.cn http://www.morning.yxwcj.cn.gov.cn.yxwcj.cn http://www.morning.dfbeer.com.gov.cn.dfbeer.com http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn http://www.morning.kwhrq.cn.gov.cn.kwhrq.cn http://www.morning.qjlkp.cn.gov.cn.qjlkp.cn http://www.morning.gwwky.cn.gov.cn.gwwky.cn http://www.morning.htfnz.cn.gov.cn.htfnz.cn http://www.morning.pudejun.com.gov.cn.pudejun.com http://www.morning.bhqlj.cn.gov.cn.bhqlj.cn http://www.morning.lstmq.cn.gov.cn.lstmq.cn http://www.morning.kqxng.cn.gov.cn.kqxng.cn http://www.morning.yrlfy.cn.gov.cn.yrlfy.cn http://www.morning.leeong.com.gov.cn.leeong.com http://www.morning.zhmgcreativeeducation.cn.gov.cn.zhmgcreativeeducation.cn