演講嘉賓 | 蔡萬蒼
回顧整理 | 廖 濤
排版校對 | 李萍萍
嘉賓簡介
蔡萬蒼,13年C++/Qt開發(fā)相關(guān)工作經(jīng)驗(yàn),曾任職Qt公司,擔(dān)任技術(shù)支持、Qt咨詢師,協(xié)助國內(nèi)多家Qt企業(yè)版用戶完成基于Qt的軟件框架搭建,參與Qt開源社區(qū)Bug維護(hù)及修改,在基于Qt框架的軟件架構(gòu)設(shè)計(jì)、Qt跨平臺(tái)適配上有多年的技術(shù)積累和經(jīng)驗(yàn),開源書籍QmlBook-in-Chinese在github上star數(shù)達(dá)到1000+,現(xiàn)任職于軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司,擔(dān)任成都圖形框架研究院軟件開發(fā)專家角色,負(fù)責(zé)圖形框架研究院的技術(shù)管理工作。
內(nèi)容來源
第一屆開放原子開源基金會(huì)OpenHarmony技術(shù)峰會(huì)——生態(tài)與互聯(lián)分論壇
視頻回顧
? ?打開 嗶哩嗶哩APP 搜索 OpenHarmony-TSC 視頻更清晰
正 文 內(nèi) 容
在全球超過70個(gè)行業(yè),8000家公司,100萬的開發(fā)者都在使用Qt,通過Qt適配OpenHarmony,能夠豐富OpenHarmony的開發(fā)生態(tài)、應(yīng)用生態(tài),加速OpenHarmony在各行業(yè)的推廣使用。如何推進(jìn)和完成Qt在OpenHarmony上的適配呢?軟通動(dòng)力成都圖形框架研究院軟件開發(fā)專家蔡萬蒼在第一屆OpenHarmony技術(shù)峰會(huì)上分享了精彩觀點(diǎn)。
01?
Qt 適配 OpenHarmony 意義
Qt是一個(gè)C++跨平臺(tái)開發(fā)框架,主要用于開發(fā)圖形用戶界面(Graphical User Interface,GUI)程序,具有跨平臺(tái)類庫(支持目前所有主流軟硬件平臺(tái)組合)、集成開發(fā)工具(縮短軟件產(chǎn)品上市時(shí)間)以及跨平臺(tái)集成開發(fā)環(huán)境(高生產(chǎn)力開發(fā)環(huán)境)等。全球超過100萬研發(fā)者使用過Qt,Qt的跨平臺(tái)開發(fā)能力覆蓋70多個(gè)行業(yè),是從1994年至今得到廣泛的認(rèn)同和驗(yàn)證的主流技術(shù)。
Qt適配OpenHarmony有什么意義?
一、擴(kuò)大OpenHarmony開發(fā)者陣營:基于Qt跨平臺(tái)特性及Qt For OpenHarmony的適配,吸引數(shù)量龐大的Qt開發(fā)人員在OpenHarmony上進(jìn)行跨平臺(tái)應(yīng)用遷移及應(yīng)用開發(fā),能夠?qū)崿F(xiàn)開發(fā)人員業(yè)務(wù)目標(biāo)與個(gè)人能力和OpenHarmony開源生態(tài)與技術(shù)發(fā)展的雙贏。
二、豐富OpenHarmony應(yīng)用生態(tài):Qt支持目前主流的所有操作系統(tǒng),如UBuntu、CentOS、OpenEuler、Android、OS X、iOS、Windows、VxWorks、QNX等,涵蓋從嵌入式平臺(tái)、移動(dòng)平臺(tái)及PC桌面,基于Qt框架典型的桌面應(yīng)用,從娛樂到工業(yè)軟件都有所涉及,如暴雪的戰(zhàn)網(wǎng)客戶端、WPS、VirtualBox等等,大部分應(yīng)用程序都可以使用Qt實(shí)現(xiàn)。通過Qt適配OpenHarmony,能夠加速OpenHarmony的行業(yè)應(yīng)用推廣。
02?
計(jì)劃貢獻(xiàn)內(nèi)容
2.1??
適配計(jì)劃
Qt按使用及部署劃分,包含了設(shè)計(jì)工具、開發(fā)工具、框架必要模塊、框架附加模塊4個(gè)部分,基于OpenHarmony跨平臺(tái)開發(fā)考慮,總體計(jì)劃如下:
針對OpenHarmony的開發(fā)工具進(jìn)行補(bǔ)充
對Qt必要模塊進(jìn)行適配支持
對部分Qt附加模塊適配支持
具體工作如下:
成立 OH_QT sig,完成Qt Core(Qt核心模塊)、Qt GUI(顯示相關(guān)代碼)以及Qt QML適配
完成Qt工程部署,適配Qt相關(guān)的開發(fā)工具,實(shí)現(xiàn)Qt應(yīng)用程序北向開發(fā)封裝;適配Qt附加庫部分,如Qt Multimedia,QtRemoteObjects
完成Qt示例及DEMO適配驗(yàn)證、Qt單元測試適配驗(yàn)證;向Qt社區(qū)申請立項(xiàng)OpenHarmony支持,申請OH_QT sig畢業(yè)
開發(fā)Qt工程轉(zhuǎn)換DevEco工程工具實(shí)現(xiàn)快速的應(yīng)用遷移配置
2.2??
Qt 配套開發(fā)工具
Qt開發(fā)者通常使用Qt配套的集成開發(fā)環(huán)境Qt Creator,采用qmake或cmake進(jìn)行軟件工程管理配置,為方便開發(fā)者對已有軟件進(jìn)行移植適配,我們會(huì)開發(fā)對應(yīng)的工程轉(zhuǎn)換工具,將Qt的應(yīng)用工程轉(zhuǎn)換為DevEco Application工程,幫助開發(fā)者快速實(shí)現(xiàn)應(yīng)用的遷移配置。
03?
技術(shù)難點(diǎn)分享
Qt本身是跨平臺(tái)的框架,我們要把它跟OpenHarmony做移植,無非考慮幾個(gè)問題:一是Qt應(yīng)用程序的界面如何在OpenHarmony上進(jìn)行顯示;OpenHarmony本身觸屏的輸入、鼠標(biāo)/鍵盤的輸入怎么能夠把它映射到Qt本身的應(yīng)用程序框架里去。需要了解Qt的QPA實(shí)現(xiàn)及系統(tǒng)接口調(diào)用的相關(guān)邏輯,就能實(shí)現(xiàn)Qt應(yīng)用程序在OpenHarmony上的運(yùn)行。
3.1??
QPA 實(shí)現(xiàn)及系統(tǒng)接口調(diào)用
Qt平臺(tái)抽象(QPA)是Qt的平臺(tái)抽象層,QPA插件是通過子類化各種QPlatform*類來實(shí)現(xiàn)系統(tǒng)接口的接入,例如用于窗口系統(tǒng)集成的QPlatformIntegration和QPlatformWindow以及用于更深層次的平臺(tái)主題化和集成的QPlatformTheme。
QPA核心對象及作用:通過QPlatfromIntegration實(shí)現(xiàn)對QPA插件的對象聲明周期管理,Qt GUI等模塊通過Qt已完成的平臺(tái)抽象層相關(guān)類實(shí)現(xiàn)對系統(tǒng)底層的調(diào)用,其中比較重要的實(shí)現(xiàn)類包括:EventDispatcher(實(shí)現(xiàn)系統(tǒng)底層事件接入)、BackingStore(系統(tǒng)圖形繪制雙緩存實(shí)現(xiàn))、Screen(系統(tǒng)屏幕對象,用于管理Window顯示)、Window(系統(tǒng)窗口對象)、InputContext(系統(tǒng)輸入處理,包括鼠標(biāo)、輸入法等)、OpenGLContext(系統(tǒng)窗口OpenGL渲染上下文)以及Clipboard(系統(tǒng)剪切板)。
Qt Widget For OpenHarmony渲染流程:基于Qt框架自成體系的圖形框架和事件系統(tǒng),在OpenHarmony上基于XComponent生成的EGLSurface,采用圖像二維繪制的方式在OpenGL Surface上實(shí)現(xiàn)雙緩存渲染機(jī)制,完成Qt Widget的窗口內(nèi)容渲染。
Qt Quick For OpenHarmony渲染流程:Qt Quick采用自成體系的Scene Graph基于OpenGL標(biāo)準(zhǔn)接口實(shí)現(xiàn),QPA OpenHarmony插件基于XCompent生成EGL Surface,并通過QPA標(biāo)準(zhǔn)實(shí)現(xiàn)類重載實(shí)現(xiàn)PlatformIntegration實(shí)現(xiàn)與Scene Graph的OpenGLContext綁定,Qt Quick基于標(biāo)準(zhǔn)OpenGL接口在XComponent上實(shí)現(xiàn)圖形渲染。
OpenHarmony Touch事件接入:基于XComponent的事件監(jiān)控回調(diào),在QPA的InputContext實(shí)現(xiàn)中實(shí)現(xiàn)對XComponent的輸入監(jiān)控,將監(jiān)控的輸入轉(zhuǎn)換為Qt Event發(fā)送到Qt Event隊(duì)列中,由Qt框架實(shí)現(xiàn)對輸入的處理,完成對觸屏操作和鼠標(biāo)操作的處理。
基于NAPI的應(yīng)用框架接口調(diào)用:基于OpenHarmony的應(yīng)用接口規(guī)范,部分接口未提供NDK接口,需要通過Node.JS的C++插件NAPI調(diào)用ETS SDK的接口進(jìn)行實(shí)現(xiàn),QPA For OpenHarmony部分系統(tǒng)接口采用該種方式完成對系統(tǒng)接口的調(diào)用,例如系統(tǒng)剪切板。
基于TS腳本自定義符合Qt標(biāo)準(zhǔn)的對話框:Qt上層接口的QMessageBox支持系統(tǒng)默認(rèn)樣式對話框彈出,該接口在OpenHarmony的SDK中有提供,由于參數(shù)差異,無法通過NAPI直接調(diào)用,我們采用ETS語言實(shí)現(xiàn)后導(dǎo)入到DialogHelpers中進(jìn)行使用。目前系統(tǒng)輸入法采用NAPI接口進(jìn)行調(diào)用,通過Custom ETS實(shí)現(xiàn)對系統(tǒng)輸入法的調(diào)用進(jìn)行監(jiān)控,再傳入Qt Input Context轉(zhuǎn)換為Qt Key Event輸入到Qt框架,由于輸入法的高性能要求,后續(xù)會(huì)與OpenHarmony團(tuán)隊(duì)進(jìn)行溝通,考慮開放系統(tǒng)底層輸入法NDK接口。
3.2??
Qt For OpenHarmony 應(yīng)用管理
符合OpenHarmony標(biāo)準(zhǔn)的應(yīng)用管理:
啟動(dòng)流程:(1)Qt框架按照Stage模型開發(fā)符合Stage-Ability,應(yīng)用程序通過EntryAbility調(diào)用啟動(dòng);(2)在QtAbilityStage的onCreate中,使用NAPI機(jī)制初始化Qt的Native模塊,并調(diào)用App自己的main入口函數(shù),拉起應(yīng)用邏輯。
退出流程:在EntryAbility的onDestory中,使用NAPI機(jī)制通知Qt的QPA模塊,退出Qt Framework的主循環(huán)及業(yè)務(wù)邏輯。
與傳統(tǒng)的C++應(yīng)用程序不同,遵循Openharmony的北向開發(fā)應(yīng)用管理,需要通過eTS框架完成應(yīng)用程序C/C++應(yīng)用程序main函數(shù)入口調(diào)用啟動(dòng)。
由于XComponent的動(dòng)態(tài)創(chuàng)建問題,目前QPA的NAPI函數(shù)調(diào)用放在index.ets中進(jìn)行調(diào)用,該問題還需要與OpenHarmony團(tuán)隊(duì)進(jìn)行溝通,討論基于OpenHarmony的最優(yōu)解:(1)基于ETS框架自定義ETS腳本,實(shí)現(xiàn)XComponent的動(dòng)態(tài)創(chuàng)建,在ETS框架下實(shí)現(xiàn)應(yīng)用程序窗口管理;(2)基于NDK開發(fā)的XComponent的新增接口,在Qt App側(cè)實(shí)現(xiàn)應(yīng)用程序的窗口管理。
04?
總結(jié)與展望
基于Qt跨平臺(tái)特性及Qt For OpenHarmony的適配,能夠促進(jìn)OpenHarmony跨平臺(tái)應(yīng)用遷移及應(yīng)用開發(fā),對OpenHarmony技術(shù)生態(tài)有一定的積極作用,期待大家一塊參與到Qt適配OpenHarmony的相關(guān)工作中來。
E N D
審核編輯 黃宇
-
OpenHarmony
+關(guān)注
關(guān)注
25文章
3753瀏覽量
16668
發(fā)布評論請先 登錄
相關(guān)推薦
回顧OpenHarmony社區(qū)2024年度精彩瞬間
OpenHarmony城市技術(shù)論壇第12期——合肥站圓滿舉辦
![<b class='flag-5'>OpenHarmony</b>城市技術(shù)論壇<b class='flag-5'>第</b>12<b class='flag-5'>期</b>——合肥站圓滿舉辦](https://file1.elecfans.com/web3/M00/03/D8/wKgZO2dsrjiAaSqIAAAYzf1wxqE777.jpg)
今晚直播!OpenHarmony應(yīng)用開發(fā)精品課程第二期來啦~
OpenHarmony城市技術(shù)論壇第11期——香港站圓滿舉辦
![<b class='flag-5'>OpenHarmony</b>城市技術(shù)論壇<b class='flag-5'>第</b>11<b class='flag-5'>期</b>——香港站圓滿舉辦](https://file1.elecfans.com//web2/M00/0B/CE/wKgZomc40fSAMPVnAAHSXxGwOIo615.jpg)
OpenHarmony城市技術(shù)論壇第11期(香港站)【智能終端操作系統(tǒng)技術(shù)與國際化生態(tài)構(gòu)建】大咖齊聚
![<b class='flag-5'>OpenHarmony</b>城市技術(shù)論壇<b class='flag-5'>第</b>11<b class='flag-5'>期</b>(香港站)【智能終端操作系統(tǒng)技術(shù)與國際化生態(tài)構(gòu)建】大咖齊聚](https://file1.elecfans.com//web2/M00/0B/2E/wKgZomcuSGaAbHYbACRg5dm0NvI203.png)
九聯(lián)科技受邀參加OpenHarmony峰會(huì),共筑鴻蒙生態(tài)繁榮
高燃回顧|第三屆OpenHarmony技術(shù)大會(huì)精彩瞬間
第二屆大會(huì)回顧第25期 | OpenHarmony上的Python設(shè)備應(yīng)用開發(fā)
![第二屆大會(huì)<b class='flag-5'>回顧</b><b class='flag-5'>第</b>25<b class='flag-5'>期</b> | <b class='flag-5'>OpenHarmony</b>上的Python設(shè)備應(yīng)用開發(fā)](https://file1.elecfans.com/web2/M00/04/4E/wKgZombNTbKAGXSVAAARd6jESHY243.jpg)
OpenHarmony城市技術(shù)論壇第10期——上海站圓滿舉辦
![<b class='flag-5'>OpenHarmony</b>城市技術(shù)論壇<b class='flag-5'>第</b>10<b class='flag-5'>期</b>——上海站圓滿舉辦](https://file1.elecfans.com//web2/M00/04/86/wKgaombFRFWAJDEtAAIK5_ic29Q491.png)
第二屆大會(huì)回顧第24期 | 面向OpenHarmony的軟件工程研究:機(jī)遇與挑戰(zhàn)
![第二屆大會(huì)<b class='flag-5'>回顧</b><b class='flag-5'>第</b>24<b class='flag-5'>期</b> | 面向<b class='flag-5'>OpenHarmony</b>的軟件工程研究:機(jī)遇與挑戰(zhàn)](https://file1.elecfans.com/web2/M00/01/13/wKgZomazSQ6AQxRJAABlnH7_7F0432.png)
第二屆大會(huì)回顧第20期 OHPM:建設(shè)安全可靠的OpenHarmony生態(tài)軟件倉庫
![第二屆大會(huì)<b class='flag-5'>回顧</b><b class='flag-5'>第</b>20<b class='flag-5'>期</b> OHPM:建設(shè)安全可靠的<b class='flag-5'>OpenHarmony</b>生態(tài)軟件倉庫](https://file1.elecfans.com/web2/M00/F9/05/wKgaomaGeJiAapwTAAASeZvnT3Q883.jpg)
OpenHarmony城市技術(shù)論壇第8期——廈門站圓滿落幕
![<b class='flag-5'>OpenHarmony</b>城市技術(shù)論壇<b class='flag-5'>第</b>8<b class='flag-5'>期</b>——廈門站圓滿落幕](https://file1.elecfans.com//web2/M00/D4/7B/wKgZomYlzZaABgMkAAGXsd3b9NA71.jpeg)
OpenHarmony城市技術(shù)論壇第8期——廈門站圓滿舉辦
![<b class='flag-5'>OpenHarmony</b>城市技術(shù)論壇<b class='flag-5'>第</b>8<b class='flag-5'>期</b>——廈門站圓滿舉辦](https://file1.elecfans.com/web2/M00/D4/4C/wKgaomYk2ryARSB3AAAduX3dAqM211.jpg)
第二屆大會(huì)回顧第15期 | OpenHarmony性能調(diào)優(yōu)工具介紹
![第二屆大會(huì)<b class='flag-5'>回顧</b><b class='flag-5'>第</b>15<b class='flag-5'>期</b> | <b class='flag-5'>OpenHarmony</b>性能調(diào)優(yōu)工具介紹](https://file1.elecfans.com/web2/M00/C2/BD/wKgZomXm79SADTRYAAA4291E-FE110.png)
第二屆大會(huì)回顧第10期 | 低時(shí)延分布式共享設(shè)備研究與探索
![第二屆大會(huì)<b class='flag-5'>回顧</b><b class='flag-5'>第</b>10<b class='flag-5'>期</b> | 低時(shí)延分布式共享設(shè)備研究與探索](https://file1.elecfans.com/web2/M00/C1/DB/wKgaomXbDh6AQzoRAABnAr7jd10652.png)
評論