日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

chrome 内核CEF 编译和qt 封装(下)

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 chrome 内核CEF 编译和qt 封装(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?上篇講述了如何編譯cef 成果物以及驗證方法。 但在實際開發過程中需要對cef 關鍵庫進行再次封裝,以便在項目開發過程中更加方便的使用此庫。本文結合qt 框架進行此庫的封裝。

一、 CEF結構介紹

1、?CEF主進程和窗口之間的結構關系

????????一個瀏覽器有很多個CefBrowser窗口,這些窗口都是在Browser進程中創建。browser進程用來管理和處理回調函數消息。Renderer進程用來實現網頁的渲染,每個renderer進程包含有一個主網頁mainframe和多個子網頁subframe。

2、Renderer進程的實現結構

renderer程序繼承CefApp和CefRenderProcessHandler類,在main函數中初始化。通過CefSettings.browser_subprocess_path配置render可執行程序路徑。browser進程就會去啟動這個進程去渲染網頁。

?3、browser進程的實現結構

browserapp要繼承CefApp和CefBrowserProcessHandler類。實現browserapp的定義。同時要新建clienthandler類實現圖中的回調函數接口類,用來處理攔截響應請求、管理生命周期、下載、顯示加載、右鍵菜單等。在mian函數中初始化、啟動消息循環。調用CefBrowserHost的靜態方法創建browser窗口對象,在render進程的Frame中加載渲染內容。

二、cef? 進程開發模式

1、進程

CEF3是多進程架構的,CEF3進程主要有一個Browser(瀏覽器)進程和多個Renderer(渲染)進程。Browser被定義為主進程,負責窗口管理,網絡請求,網頁管理 、網絡交互。browser從服務器器請求到了響應,將html文本發送給Renderer 進程,render進程加載html,進行渲染,展示網頁的內容;除此之外,Renderer進程還負責Js Binding和對Dom節點的訪問。Browser和Renderer進程可以通過發送異步消息進行雙向通信。主應用程序很大,加載時間比較長,或者不能在非瀏覽器進程里使用,則宿主程序可使用獨立的可執行文件去運行這些Renderer進程。這可以通過配置CefSettings.browser_subprocess_path變量做到。

2、 線程

Browser進程中包含如下主要的線程:

  • TID_UI?線程是瀏覽器的主線程。如果應用程序在調用調用CefInitialize()時,傳遞CefSettings.multi_threaded_message_loop=false,這個線程也是應用程序的主線程。
  • TID_IO?線程主要負責處理IPC消息以及網絡通信。
  • TID_FILE?線程負責與文件系統交互。

每個CEF3應用程序都是相同的結構

  • 提供入口函數,用于初始化CEF、運行子進程執行邏輯或者CEF消息循環。
  • 提供CefApp實現,用于處理進程相關的回調。
  • 提供CefClient實現,用于處理Browser實例相關的回調。
  • 執行CefBrowserHost::CreateBrowser()創建一個Browser實例,使用CefLifeSpanHandler管理Browser對象生命周期。
  • 需要在程序的入口函數執行cef對象創建,初始化,命令行參數解析,CEF屬性設置,和CEF消息循環開啟等。CEF需要啟動一個主進程來管理網頁見面。這個主進程就是在man函數中啟動,進入消息循環,直到程序結束,才退出main函數。

3.? ?CEF單實例進程

????????demo里的單進程例子?

單進程開發模式:

?多進程開發模式:

三、 qt 封裝

1、構建qt? 主進程 dll 工程。為了實現把cef 相關接口信息透傳到qt 主進程里。

主進程重寫cef 提供的類:

ClientHandler、 public CefApp

?

??

子進程重寫cef 提供的類

?CefApp、CefRenderProcessHandler、CefV8Handler

?

2、核心原理:通過上層定義cef 提供的相關接口指針,并結合c++ 11 提供的std::function、std::bind 功能實現上層指針和底層指針綁定。通過此技術實現cef 底層接口參數能通過qt 信號槽機制發送到對應的界面,通過功能函數模板 實現對cef? 底層相關的接口調用,最終達到預期目的,實現cef 層的qt 封裝。

?3.最后相關成果物

需要導出的頭文件如下:

?

?在工程屬性文件里配置頭文件和lib 庫路徑,然后根據程序的初始化流程創建cef 窗口,并把窗口插入到界面布局中,show 即可。

驗證結果如下:

核心類的詳解參考:https://www.cnblogs.com/bclshuai/p/12722607.html

總結

以上是生活随笔為你收集整理的chrome 内核CEF 编译和qt 封装(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。