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)用推廣。
計(jì)劃貢獻(xiàn)內(nèi)容
適配計(jì)劃
Qt 按使用及部署劃分,包含了設(shè)計(jì)工具、開發(fā)工具、框架必要模塊、框架附加模塊 4 個(gè)部分,基于 OpenHarmony 跨平臺(tái)開發(fā)考慮,總體計(jì)劃如下:
針對(duì) OpenHarmony 的開發(fā)工具進(jìn)行補(bǔ)充
對(duì) Qt 必要模塊進(jìn)行適配支持
對(duì)部分 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 單元測(cè)試適配驗(yàn)證;向 Qt 社區(qū)申請(qǐng)立項(xiàng) OpenHarmony 支持,申請(qǐng) OH_QT sig 畢業(yè)
開發(fā) Qt 工程轉(zhuǎn)換 DevEco 工程工具實(shí)現(xiàn)快速的應(yīng)用遷移配置
配套開發(fā)工具
Qt 開發(fā)者通常使用 Qt 配套的集成開發(fā)環(huán)境 Qt Creator,采用 qmake 或 cmake 進(jìn)行軟件工程管理配置,為方便開發(fā)者對(duì)已有軟件進(jìn)行移植適配,我們會(huì)開發(fā)對(duì)應(yīng)的工程轉(zhuǎn)換工具,將 Qt 的應(yīng)用工程轉(zhuǎn)換為 DevEco Application 工程,幫助開發(fā)者快速實(shí)現(xiàn)應(yīng)用的遷移配置。
技術(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)行。
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 核心對(duì)象及作用:通過 QPlatfromIntegration 實(shí)現(xiàn)對(duì) QPA 插件的對(duì)象聲明周期管理,Qt GUI 等模塊通過 Qt 已完成的平臺(tái)抽象層相關(guān)類實(shí)現(xiàn)對(duì)系統(tǒng)底層的調(diào)用,其中比較重要的實(shí)現(xiàn)類包括:EventDispatcher(實(shí)現(xiàn)系統(tǒng)底層事件接入)、BackingStore(系統(tǒng)圖形繪制雙緩存實(shí)現(xiàn))、Screen(系統(tǒng)屏幕對(duì)象,用于管理 Window 顯示)、Window(系統(tǒng)窗口對(duì)象)、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)對(duì) XComponent 的輸入監(jiān)控,將監(jiān)控的輸入轉(zhuǎn)換為 Qt Event 發(fā)送到 Qt Event 隊(duì)列中,由 Qt 框架實(shí)現(xiàn)對(duì)輸入的處理,完成對(duì)觸屏操作和鼠標(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)接口采用該種方式完成對(duì)系統(tǒng)接口的調(diào)用,例如系統(tǒng)剪切板。
基于 TS 腳本自定義符合 Qt 標(biāo)準(zhǔn)的對(duì)話框:Qt 上層接口的 QMessageBox 支持系統(tǒng)默認(rèn)樣式對(duì)話框彈出,該接口在 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)對(duì)系統(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 接口。
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)用程序的窗口管理。
總結(jié)與展望
基于 Qt 跨平臺(tái)特性及 Qt For OpenHarmony 的適配,能夠促進(jìn) OpenHarmony 跨平臺(tái)應(yīng)用遷移及應(yīng)用開發(fā),對(duì) OpenHarmony 技術(shù)生態(tài)有一定的積極作用,期待大家一塊參與到 Qt 適配 OpenHarmony 的相關(guān)工作中來。
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
60文章
2620瀏覽量
44063 -
OpenHarmony
+關(guān)注
關(guān)注
29文章
3854瀏覽量
18635
發(fā)布評(píng)論請(qǐng)先 登錄
[分享]圖形化系統(tǒng)的設(shè)計(jì)
labview圖形化編程分享!
淺析Mixly圖形化編程軟件
基于開源鴻蒙的圖形化編程語言 ( OpenBlock )
Mixly圖形化編程軟件介紹
求一種基于Linux的Qt圖形化MP3播放器的設(shè)計(jì)方案
Qt For OpenHarmony
怎樣才能縮短開發(fā)圖形化系統(tǒng)設(shè)計(jì)的時(shí)間?

評(píng)論