html結合qt混合ui交互架構

qwebkit爲c++和html建起了一個溝通的橋樑,讓軟件的底層開發和ui的開發解耦,只要底層的api足夠穩定強大,那ui的開發就算變化多端都會很輕鬆了(對於qt c++開發者來說,不用編譯了...^ _ ^),同時可以即時更新ui,或者淘汰舊的版本(更換服務端的html即可),或者增加js統計..等等,萬維網之所以有趣,我想很多也來自於提供商有超級強大的控制能力和內容分發能力.而傳統的native應用更新之後往往很難分發到用戶手上,甚至用戶不接受更新,題外話了....混合應用既解決了代碼的保密問題,同時解決了內容分發問題,還是很有其讀到之處的,比如軟件將功能和展示分別同步開發,只要功能完成地夠快,指定好api,產品即可即時上線搶佔市場,因爲ui可以隨時更新之後分發到用戶的應用.


首先,我們需要搞明白qt和html具體是如何交互的,我們先從主從開始.

我們的設計原則是底層開放足夠穩定強大的api,ui層調用或者組合這些api進行作業.ok,主即ui,從即底層,我們先來定一定一個html頁面請求底層服務的方式(其實就是qt提供的元對象系統,只是我們讓它更好玩一些)

我們在html的meta中加入一個自定義的字段



require_core即是我們增加的meta字段,意思是請求的api的類名(這個類在底層一定是一個QObject的子類,且構造函數爲Q_INVOKABLE,開放的api即槽)

不如我們來看一看CAdbReactor好了



注意紅線處,這是個宏,我們也看看



嗯...F_DEC_REFLECT和F_USE_REFLECT,想到什麼了?是的,反射創建對象.


思緒很零散,沒事,那就在零散一點吧,我們再來看點東西








ok,讓我們試着把這些東西串在一起思考一下:

一個html的require_core字段

一個WizardHTMLEE

一個反射

我們讓頁面載入的完成的信號連到WizardHTMLEE的PageLoadFinished槽,讓WizardHTMLEE解析require_core的字段,然後使用反射創建相應的api服務對象,在html頁面中即可調用這些api了,當然,我們需要等待api服務對象創建完成



ok,這只是一個簡單的模型,實際上我們可以讓一個WizardHTMLEE支持多個webview和多個require_core的能力(實際上我已經做了一個混合html和qml的反射引擎),當然,能看懂這篇文章的話我想這些都只是個體力活了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章