QtWebEngine、QWebChannel原理結(jié)構(gòu)分析

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,原有交互方式可以參考,方便理解
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容