qt cef嵌入web(二)
在qt cef嵌入web文章中已經講述了怎么把cef頁面嵌入到qt程序中,但是這樣并不完美,因為如果需要在多個窗口上創建cef瀏覽器部件的話,在 消息監聽部分沒有辦法做區分多個瀏覽器事件,在這篇文章中我將會把上一篇相關文章中的程序結構稍作改動,以支持多個主瀏覽器窗口,主要是針對不同的瀏覽器 產生事件時分發給不同的監聽者,說到這兒,有的讀者應該就能想到了,監聽者肯定是一個數組了,而且 個數和瀏覽器數目一樣多。
??? 在接著往一下看的時候,我默認大家都已經完成創建瀏覽器并可以成功監聽事件。
??? 我先講下思路:主要圍繞每一個窗口創建一個瀏覽器,每一個瀏覽器同時又是一個監聽者。當顯示窗口的時候,創建瀏覽器,并把當前窗口的id和指針保存到 ClientHandler對象中,在瀏覽器創建成功并回調OnAfterCreated接口時,使用當前瀏覽器句柄匹配保存在 ClientHandler中的瀏覽器父窗口句柄,如果匹配成功,則把以監聽者為鍵,以瀏覽器為值的簡直對保存起來,這個鍵值對是作為后面libcef事 件回調時通知指定監聽者的依據。
??? 上面的思路可能理解起來有點兒繞,接下來我直接上關鍵性代碼,希望大家能更好的理解
typedef std::map ListenerHwnds;?
ListenerHwnds listenerHwnds_;//瀏覽器父窗口、監聽者對
typedef std::map > ListenerBrowserMap;
ListenerBrowserMap m_MainBrowsers;//監聽者、瀏覽器對
圖1圖1是瀏覽器創建成功后的回調,在該方法中添加監聽者/瀏覽器對到ClientHandler中,當瀏覽器發生事件回調的時候,調用指定的監聽者
圖2圖2的代碼是設置是否進行加載,根據ClientHanlder中已經注冊的監聽者/瀏覽器對,把瀏覽器事件發送給指定監聽者
圖3圖3是有兩個方法,方法1是保存監聽者到CliendHandler對象中,在方法在瀏覽器創建之前調用;方法2是獲取當前所有瀏覽器
圖4圖3是創建瀏覽器代碼,在調用CreateVrowser方法創建瀏覽器之前需要保存窗口句柄和指針到ClientHandler對象中,以備圖1所示代碼所用,保存代碼如上圖中有下劃線部分。
? ? 由于在上一篇相關文檔中已經可以成功創建出瀏覽器,故這篇文章跳躍性比較大,如果有不理解的地方可以去看上一篇文章。
? ? 至此,文章都是個人理解,有問題請留言
總結
以上是生活随笔為你收集整理的qt cef嵌入web(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven编译不通过:软件包com.su
- 下一篇: Lock同步锁--线程同步