QtWebEngine、QWebChannel原理結(jié)構(gòu)分析
QWebChannel分析
QWebChannel流程
QWebChannel將C++接口暴露給HTML,在HTML中調(diào)用qwebchannel.js。前提是建立tranport,QT只提供了QWebChannelAbstractTransport,需要自己實(shí)現(xiàn),官方建議用QWebSocket實(shí)現(xiàn),并個(gè)給出實(shí)例;
1、實(shí)現(xiàn)Transport類,內(nèi)置一個(gè)WebSocket套接字;
2、實(shí)現(xiàn)新的Channel類,內(nèi)置一個(gè)WebSocketServer;
3、利用新的Channel注冊(cè)c++對(duì)象,從而HTML可以使用該對(duì)象;
4、通過(guò)以下三種方式進(jìn)行C++與HTML的交互:
在HTML中連接c++ signal與js函數(shù)
在HTML中調(diào)用c++ public slots函數(shù);
在HTML中調(diào)用c++ Q_INVOKABLE修飾的函數(shù)
備注:
參考文章
1、QT:用QWebSocket實(shí)現(xiàn)webchannel,實(shí)現(xiàn)C++與HTML通信
QtWebEngine分析
QtWebEngine 框架結(jié)構(gòu)
Qt WebEngine Core是基于chromium的核心,widgets、WebEngine和 process主要分別針對(duì)桌面、QML等需求。
[圖片上傳失敗...(image-d5b015-1587826338304)]
QtWebEngine 桌面應(yīng)用結(jié)構(gòu)
[圖片上傳失敗...(image-cf9321-1587826338304)]
調(diào)試模式
#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
可以直接調(diào)用js腳本
需要返回結(jié)果,則為異步過(guò)程
頁(yè)面沒(méi)有加載完畢前,很多腳本無(wú)法正確運(yùn)行。
發(fā)布
QWebEngine的在windows下發(fā)布,需要依賴 windeployqt.exe,把自己的程序拷貝到一個(gè)空文件夾下,而后運(yùn)行:D:\TEST>windeployqt firstWebEngine.exe
QtWebEngine依賴一個(gè)單獨(dú)的進(jìn)程文件QtWebEngineProcess.exe,需要在運(yùn)行一次D:\TEST>windeployqt QtWebEngineProcess.exe
備注
1、參考文章:QWebEngine-基于chromium內(nèi)核的瀏覽器框架
待分析觀點(diǎn)
- IPC機(jī)制,CEF消息路由
備注
- qt 5.5以后取消QWebKit/QWebView,原有交互方式可以參考,方便理解