Qt 適配 OpenHarmony 意義
Qt 是一個 C++ 跨平臺開發(fā)框架,主要用于開發(fā)圖形用戶界面(Graphical User Interface,GUI)程序,具有跨平臺類庫(支持目前所有主流軟硬件平臺組合)、集成開發(fā)工具(縮短軟件產(chǎn)品上市時間)以及跨平臺集成開發(fā)環(huán)境(高生產(chǎn)力開發(fā)環(huán)境)等。全球超過 100 萬研發(fā)者使用過 Qt,Qt 的跨平臺開發(fā)能力覆蓋 70 多個行業(yè),是從 1994 年至今得到廣泛的認同和驗證的主流技術(shù)。
Qt 適配 OpenHarmony 有什么意義?
一、擴大 OpenHarmony 開發(fā)者陣營:基于 Qt 跨平臺特性及 Qt For OpenHarmony 的適配,吸引數(shù)量龐大的 Qt 開發(fā)人員在 OpenHarmony 上進行跨平臺應(yīng)用遷移及應(yīng)用開發(fā),能夠?qū)崿F(xiàn)開發(fā)人員業(yè)務(wù)目標(biāo)與個人能力和 OpenHarmony 開源生態(tài)與技術(shù)發(fā)展的雙贏。
二、豐富 OpenHarmony 應(yīng)用生態(tài):Qt 支持目前主流的所有操作系統(tǒng),如 UBuntu、CentOS、OpenEuler、Android、OS X、iOS、Windows、VxWorks、QNX 等,涵蓋從嵌入式平臺、移動平臺及 PC 桌面,基于 Qt 框架典型的桌面應(yīng)用,從娛樂到工業(yè)軟件都有所涉及,如暴雪的戰(zhàn)網(wǎng)客戶端、WPS、VirtualBox 等等,大部分應(yīng)用程序都可以使用 Qt 實現(xiàn)。通過 Qt 適配 OpenHarmony,能夠加速 OpenHarmony 的行業(yè)應(yīng)用推廣。
計劃貢獻內(nèi)容
適配計劃
Qt 按使用及部署劃分,包含了設(shè)計工具、開發(fā)工具、框架必要模塊、框架附加模塊 4 個部分,基于 OpenHarmony 跨平臺開發(fā)考慮,總體計劃如下:
針對 OpenHarmony 的開發(fā)工具進行補充
對 Qt 必要模塊進行適配支持
對部分 Qt 附加模塊適配支持
具體工作如下:
成立 OH_QT sig,完成 Qt Core(Qt 核心模塊)、Qt GUI(顯示相關(guān)代碼)以及 Qt QML 適配
完成 Qt 工程部署,適配 Qt 相關(guān)的開發(fā)工具,實現(xiàn) Qt 應(yīng)用程序北向開發(fā)封裝;適配 Qt 附加庫部分,如 Qt Multimedia, QtRemoteObjects
完成 Qt 示例及 DEMO 適配驗證、Qt 單元測試適配驗證;向 Qt 社區(qū)申請立項 OpenHarmony 支持,申請 OH_QT sig 畢業(yè)
開發(fā) Qt 工程轉(zhuǎn)換 DevEco 工程工具實現(xiàn)快速的應(yīng)用遷移配置
配套開發(fā)工具
Qt 開發(fā)者通常使用 Qt 配套的集成開發(fā)環(huán)境 Qt Creator,采用 qmake 或 cmake 進行軟件工程管理配置,為方便開發(fā)者對已有軟件進行移植適配,我們會開發(fā)對應(yīng)的工程轉(zhuǎn)換工具,將 Qt 的應(yīng)用工程轉(zhuǎn)換為 DevEco Application 工程,幫助開發(fā)者快速實現(xiàn)應(yīng)用的遷移配置。
技術(shù)難點分享
Qt 本身是跨平臺的框架,我們要把它跟 OpenHarmony 做移植,無非考慮幾個問題:一是 Qt 應(yīng)用程序的界面如何在 OpenHarmony 上進行顯示;OpenHarmony 本身觸屏的輸入、鼠標(biāo) / 鍵盤的輸入怎么能夠把它映射到 Qt 本身的應(yīng)用程序框架里去。需要了解 Qt 的 QPA 實現(xiàn)及系統(tǒng)接口調(diào)用的相關(guān)邏輯,就能實現(xiàn) Qt 應(yīng)用程序在 OpenHarmony 上的運行。
QPA 實現(xiàn)及系統(tǒng)接口調(diào)用
Qt 平臺抽象(QPA)是 Qt 的平臺抽象層,QPA 插件是通過子類化各種 QPlatform * 類來實現(xiàn)系統(tǒng)接口的接入,例如用于窗口系統(tǒng)集成的 QPlatformIntegration 和 QPlatformWindow 以及用于更深層次的平臺主題化和集成的 QPlatformTheme。
QPA 核心對象及作用:通過 QPlatfromIntegration 實現(xiàn)對 QPA 插件的對象聲明周期管理,Qt GUI 等模塊通過 Qt 已完成的平臺抽象層相關(guān)類實現(xiàn)對系統(tǒng)底層的調(diào)用,其中比較重要的實現(xiàn)類包括:EventDispatcher(實現(xiàn)系統(tǒng)底層事件接入)、BackingStore(系統(tǒng)圖形繪制雙緩存實現(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 上實現(xiàn)雙緩存渲染機制,完成 Qt Widget 的窗口內(nèi)容渲染。
Qt Quick For OpenHarmony 渲染流程:Qt Quick 采用自成體系的 Scene Graph 基于 OpenGL 標(biāo)準(zhǔn)接口實現(xiàn),QPA OpenHarmony 插件基于 XCompent 生成 EGL Surface,并通過 QPA 標(biāo)準(zhǔn)實現(xiàn)類重載實現(xiàn) PlatformIntegration 實現(xiàn)與 Scene Graph 的 OpenGLContext 綁定,Qt Quick 基于標(biāo)準(zhǔn) OpenGL 接口在 XComponent 上實現(xiàn)圖形渲染。
OpenHarmony Touch 事件接入:基于 XComponent 的事件監(jiān)控回調(diào),在 QPA 的 InputContext 實現(xiàn)中實現(xiàn)對 XComponent 的輸入監(jiān)控,將監(jiān)控的輸入轉(zhuǎn)換為 Qt Event 發(fā)送到 Qt Event 隊列中,由 Qt 框架實現(xiàn)對輸入的處理,完成對觸屏操作和鼠標(biāo)操作的處理。
基于 NAPI 的應(yīng)用框架接口調(diào)用:基于 OpenHarmony 的應(yīng)用接口規(guī)范,部分接口未提供 NDK 接口,需要通過 Node.JS 的 C++ 插件 NAPI 調(diào)用 ETS SDK 的接口進行實現(xiàn),QPA For OpenHarmony 部分系統(tǒng)接口采用該種方式完成對系統(tǒng)接口的調(diào)用,例如系統(tǒng)剪切板。
基于 TS 腳本自定義符合 Qt 標(biāo)準(zhǔn)的對話框:Qt 上層接口的 QMessageBox 支持系統(tǒng)默認樣式對話框彈出,該接口在 OpenHarmony 的 SDK 中有提供,由于參數(shù)差異,無法通過 NAPI 直接調(diào)用,我們采用 ETS 語言實現(xiàn)后導(dǎo)入到 DialogHelpers 中進行使用。目前系統(tǒng)輸入法采用 NAPI 接口進行調(diào)用,通過 Custom ETS 實現(xiàn)對系統(tǒng)輸入法的調(diào)用進行監(jiān)控,再傳入 Qt Input Context 轉(zhuǎn)換為 Qt Key Event 輸入到 Qt 框架,由于輸入法的高性能要求,后續(xù)會與 OpenHarmony 團隊進行溝通,考慮開放系統(tǒng)底層輸入法 NDK 接口。
Qt For OpenHarmony 應(yīng)用管理
符合 OpenHarmony 標(biāo)準(zhǔn)的應(yīng)用管理:
啟動流程:(1)Qt 框架按照 Stage 模型開發(fā)符合 Stage-Ability,應(yīng)用程序通過 EntryAbility 調(diào)用啟動;(2)在 QtAbilityStage 的 onCreate 中,使用 NAPI 機制初始化 Qt 的 Native 模塊,并調(diào)用 App 自己的 main 入口函數(shù),拉起應(yīng)用邏輯。
退出流程:在 EntryAbility 的 onDestory 中,使用 NAPI 機制通知 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)用啟動。
由于 XComponent 的動態(tài)創(chuàng)建問題,目前 QPA 的 NAPI 函數(shù)調(diào)用放在 index.ets 中進行調(diào)用,該問題還需要與 OpenHarmony 團隊進行溝通,討論基于 OpenHarmony 的最優(yōu)解:(1)基于 ETS 框架自定義 ETS 腳本,實現(xiàn) XComponent 的動態(tài)創(chuàng)建,在 ETS 框架下實現(xiàn)應(yīng)用程序窗口管理;(2)基于 NDK 開發(fā)的 XComponent 的新增接口,在 Qt App 側(cè)實現(xiàn)應(yīng)用程序的窗口管理。
總結(jié)與展望
基于 Qt 跨平臺特性及 Qt For OpenHarmony 的適配,能夠促進 OpenHarmony 跨平臺應(yīng)用遷移及應(yīng)用開發(fā),對 OpenHarmony 技術(shù)生態(tài)有一定的積極作用,期待大家一塊參與到 Qt 適配 OpenHarmony 的相關(guān)工作中來。
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2339瀏覽量
42805 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3713瀏覽量
16254
發(fā)布評論請先 登錄
相關(guān)推薦
評論