QtWebEngine、QWebChannel原理结构分析
QWebChannel分析
QWebChannel流程
QWebChannel将C++接口暴露给HTML,在HTML中调用qwebchannel.js。前提是建立tranport,QT只提供了QWebChannelAbstractTransport,需要自己实现,官方建议用QWebSocket实现,并个给出实例;
1、实现Transport类,内置一个WebSocket套接字;
2、实现新的Channel类,内置一个WebSocketServer;
3、利用新的Channel注册c++对象,从而HTML可以使用该对象;
4、通过以下三种方式进行C++与HTML的交互:
在HTML中连接c++ signal与js函数
在HTML中调用c++ public slots函数;
在HTML中调用c++ Q_INVOKABLE修饰的函数
备注:
参考文章
1、QT:用QWebSocket实现webchannel,实现C++与HTML通信
QtWebEngine分析
QtWebEngine 框架结构
Qt WebEngine Core是基于chromium的核心,widgets、WebEngine和 process主要分别针对桌面、QML等需求。
[图片上传失败...(image-d5b015-1587826338304)]
QtWebEngine 桌面应用结构
[图片上传失败...(image-cf9321-1587826338304)]
调试模式
#include <QApplication>
#include <QWebEngineView>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWebEngineView * pdev = new QWebEngineView();
pdev->show();
QWebEngineView * pv = new QWebEngineView();
pv->setUrl(QUrl("http://www.baidu.com"));
pv->show();
pv->page()->setDevToolsPage(pdev->page());
return a.exec();
}
other
可以直接调用js脚本
需要返回结果,则为异步过程
页面没有加载完毕前,很多脚本无法正确运行。
发布
QWebEngine的在windows下发布,需要依赖 windeployqt.exe,把自己的程序拷贝到一个空文件夹下,而后运行:D:\TEST>windeployqt firstWebEngine.exe
QtWebEngine依赖一个单独的进程文件QtWebEngineProcess.exe,需要在运行一次D:\TEST>windeployqt QtWebEngineProcess.exe
备注
1、参考文章:QWebEngine-基于chromium内核的浏览器框架
待分析观点
- IPC机制,CEF消息路由
备注
- qt 5.5以后取消QWebKit/QWebView,原有交互方式可以参考,方便理解