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