0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Qt For OpenHarmony圖形化的進展突破

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-02 14:29 ? 次閱讀

Qt 適配 OpenHarmony 意義

Qt 是一個 C++ 跨平臺開發(fā)框架,主要用于開發(fā)圖形用戶界面(Graphical User Interface,GUI)程序,具有跨平臺類庫(支持目前所有主流軟硬件平臺組合)、集成開發(fā)工具(縮短軟件產品上市時間)以及跨平臺集成開發(fā)環(huán)境(高生產力開發(fā)環(huán)境)等。全球超過 100 萬研發(fā)者使用過 Qt,Qt 的跨平臺開發(fā)能力覆蓋 70 多個行業(yè),是從 1994 年至今得到廣泛的認同和驗證的主流技術。

wKgZomUECciALXOFAAD6MIyfhD8750.png


Qt 適配 OpenHarmony 有什么意義?

一、擴大 OpenHarmony 開發(fā)者陣營:基于 Qt 跨平臺特性及 Qt For OpenHarmony 的適配,吸引數量龐大的 Qt 開發(fā)人員在 OpenHarmony 上進行跨平臺應用遷移及應用開發(fā),能夠實現開發(fā)人員業(yè)務目標與個人能力和 OpenHarmony 開源生態(tài)與技術發(fā)展的雙贏。

二、豐富 OpenHarmony 應用生態(tài):Qt 支持目前主流的所有操作系統(tǒng),如 UBuntu、CentOS、OpenEuler、Android、OS X、iOS、Windows、VxWorks、QNX 等,涵蓋從嵌入式平臺、移動平臺及 PC 桌面,基于 Qt 框架典型的桌面應用,從娛樂到工業(yè)軟件都有所涉及,如暴雪的戰(zhàn)網客戶端、WPS、VirtualBox 等等,大部分應用程序都可以使用 Qt 實現。通過 Qt 適配 OpenHarmony,能夠加速 OpenHarmony 的行業(yè)應用推廣。

計劃貢獻內容

適配計劃

Qt 按使用及部署劃分,包含了設計工具、開發(fā)工具、框架必要模塊、框架附加模塊 4 個部分,基于 OpenHarmony 跨平臺開發(fā)考慮,總體計劃如下:

針對 OpenHarmony 的開發(fā)工具進行補充

對 Qt 必要模塊進行適配支持

對部分 Qt 附加模塊適配支持

wKgZomUECc-ADXz3AADyrFznN7c223.png


具體工作如下:

成立 OH_QT sig,完成 Qt Core(Qt 核心模塊)、Qt GUI(顯示相關代碼)以及 Qt QML 適配

完成 Qt 工程部署,適配 Qt 相關的開發(fā)工具,實現 Qt 應用程序北向開發(fā)封裝;適配 Qt 附加庫部分,如 Qt Multimedia, QtRemoteObjects

完成 Qt 示例及 DEMO 適配驗證、Qt 單元測試適配驗證;向 Qt 社區(qū)申請立項 OpenHarmony 支持,申請 OH_QT sig 畢業(yè)

開發(fā) Qt 工程轉換 DevEco 工程工具實現快速的應用遷移配置

配套開發(fā)工具

Qt 開發(fā)者通常使用 Qt 配套的集成開發(fā)環(huán)境 Qt Creator,采用 qmake 或 cmake 進行軟件工程管理配置,為方便開發(fā)者對已有軟件進行移植適配,我們會開發(fā)對應的工程轉換工具,將 Qt 的應用工程轉換為 DevEco Application 工程,幫助開發(fā)者快速實現應用的遷移配置。

技術難點分享

Qt 本身是跨平臺的框架,我們要把它跟 OpenHarmony 做移植,無非考慮幾個問題:一是 Qt 應用程序的界面如何在 OpenHarmony 上進行顯示;OpenHarmony 本身觸屏的輸入、鼠標 / 鍵盤的輸入怎么能夠把它映射到 Qt 本身的應用程序框架里去。需要了解 Qt 的 QPA 實現及系統(tǒng)接口調用的相關邏輯,就能實現 Qt 應用程序在 OpenHarmony 上的運行。

QPA 實現及系統(tǒng)接口調用

Qt 平臺抽象(QPA)是 Qt 的平臺抽象層,QPA 插件是通過子類化各種 QPlatform * 類來實現系統(tǒng)接口的接入,例如用于窗口系統(tǒng)集成的 QPlatformIntegration 和 QPlatformWindow 以及用于更深層次的平臺主題化和集成的 QPlatformTheme。

wKgaomW8iZ-APLBRAAHy6nFkeG0215.png

QPA 核心對象及作用:通過 QPlatfromIntegration 實現對 QPA 插件的對象聲明周期管理,Qt GUI 等模塊通過 Qt 已完成的平臺抽象層相關類實現對系統(tǒng)底層的調用,其中比較重要的實現類包括:EventDispatcher(實現系統(tǒng)底層事件接入)、BackingStore(系統(tǒng)圖形繪制雙緩存實現)、Screen(系統(tǒng)屏幕對象,用于管理 Window 顯示)、Window(系統(tǒng)窗口對象)、InputContext(系統(tǒng)輸入處理,包括鼠標、輸入法等)、OpenGLContext(系統(tǒng)窗口 OpenGL 渲染上下文)以及 Clipboard(系統(tǒng)剪切板)。

wKgZomW8ibSAOiNHAAIeW-zVhxQ042.png


Qt Widget For OpenHarmony 渲染流程:基于 Qt 框架自成體系的圖形框架和事件系統(tǒng),在 OpenHarmony 上基于 XComponent 生成的 EGLSurface,采用圖像二維繪制的方式在 OpenGL Surface 上實現雙緩存渲染機制,完成 Qt Widget 的窗口內容渲染。

wKgZomW8ieiAQPjFAADPoP3Ng6g445.pngwKgaomW8i7SAH89cAADPoP3Ng6g786.png

Qt Quick For OpenHarmony 渲染流程:Qt Quick 采用自成體系的 Scene Graph 基于 OpenGL 標準接口實現,QPA OpenHarmony 插件基于 XCompent 生成 EGL Surface,并通過 QPA 標準實現類重載實現 PlatformIntegration 實現與 Scene Graph 的 OpenGLContext 綁定,Qt Quick 基于標準 OpenGL 接口在 XComponent 上實現圖形渲染。

wKgZomW8i7SAfuLhAADN22nycpk929.pngwKgaomW8ijaABa2AAADN22nycpk938.png

OpenHarmony Touch 事件接入:基于 XComponent 的事件監(jiān)控回調,在 QPA 的 InputContext 實現中實現對 XComponent 的輸入監(jiān)控,將監(jiān)控的輸入轉換為 Qt Event 發(fā)送到 Qt Event 隊列中,由 Qt 框架實現對輸入的處理,完成對觸屏操作和鼠標操作的處理。

wKgaomW8i7WAeHeNAAD7MkKCBlA214.pngwKgZomW8in2ABHRSAAD7MkKCBlA379.png

基于 NAPI 的應用框架接口調用:基于 OpenHarmony 的應用接口規(guī)范,部分接口未提供 NDK 接口,需要通過 Node.JS 的 C++ 插件 NAPI 調用 ETS SDK 的接口進行實現,QPA For OpenHarmony 部分系統(tǒng)接口采用該種方式完成對系統(tǒng)接口的調用,例如系統(tǒng)剪切板。

wKgaomW8i7aAKz8-AADxvIXr7Vw468.pngwKgaomW8ityAP2S5AADxvIXr7Vw276.png

基于 TS 腳本自定義符合 Qt 標準的對話框:Qt 上層接口的 QMessageBox 支持系統(tǒng)默認樣式對話框彈出,該接口在 OpenHarmony 的 SDK 中有提供,由于參數差異,無法通過 NAPI 直接調用,我們采用 ETS 語言實現后導入到 DialogHelpers 中進行使用。目前系統(tǒng)輸入法采用 NAPI 接口進行調用,通過 Custom ETS 實現對系統(tǒng)輸入法的調用進行監(jiān)控,再傳入 Qt Input Context 轉換為 Qt Key Event 輸入到 Qt 框架,由于輸入法的高性能要求,后續(xù)會與 OpenHarmony 團隊進行溝通,考慮開放系統(tǒng)底層輸入法 NDK 接口。

wKgZomW8i7eAd9kFAAEYoXx7qAw822.pngwKgZomW8iuWAP8miAAEYoXx7qAw316.png

Qt For OpenHarmony 應用管理

符合 OpenHarmony 標準的應用管理:

啟動流程:(1)Qt 框架按照 Stage 模型開發(fā)符合 Stage-Ability,應用程序通過 EntryAbility 調用啟動;(2)在 QtAbilityStage 的 onCreate 中,使用 NAPI 機制初始化 Qt 的 Native 模塊,并調用 App 自己的 main 入口函數,拉起應用邏輯。

退出流程:在 EntryAbility 的 onDestory 中,使用 NAPI 機制通知 Qt 的 QPA 模塊,退出 Qt Framework 的主循環(huán)及業(yè)務邏輯。

wKgaomW8i2-AbVNsAAGxOlwcg-I212.png

與傳統(tǒng)的 C++ 應用程序不同,遵循 Openharmony 的北向開發(fā)應用管理,需要通過 eTS 框架完成應用程序 C/C++ 應用程序 main 函數入口調用啟動。

由于 XComponent 的動態(tài)創(chuàng)建問題,目前 QPA 的 NAPI 函數調用放在 index.ets 中進行調用,該問題還需要與 OpenHarmony 團隊進行溝通,討論基于 OpenHarmony 的最優(yōu)解:(1)基于 ETS 框架自定義 ETS 腳本,實現 XComponent 的動態(tài)創(chuàng)建,在 ETS 框架下實現應用程序窗口管理;(2)基于 NDK 開發(fā)的 XComponent 的新增接口,在 Qt App 側實現應用程序的窗口管理。

wKgaomW8i4SAWba1AAE8DjHWOgA300.pngwKgZomW8i7eAcLdnAAE8DjHWOgA244.png

總結與展望

基于 Qt 跨平臺特性及 Qt For OpenHarmony 的適配,能夠促進 OpenHarmony 跨平臺應用遷移及應用開發(fā),對 OpenHarmony 技術生態(tài)有一定的積極作用,期待大家一塊參與到 Qt 適配 OpenHarmony 的相關工作中來。


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2287

    瀏覽量

    42629
  • OpenHarmony
    +關注

    關注

    25

    文章

    3607

    瀏覽量

    15956
收藏 人收藏

    評論

    相關推薦

    [分享]圖形化系統(tǒng)的設計

    圖形化系統(tǒng)的設計 商用現成建模平臺如前所述,由于許多設計延遲或是根本無法面市,甚至更糟;由于設計會在推出之后宣告失敗,我們必須采取行動,確保以更短的時間獲得更優(yōu)質的產品。一舉兩得
    發(fā)表于 05-30 15:56

    圖形化編程

    圖形化編程語言的線型如何區(qū)分
    發(fā)表于 05-24 13:57

    labview圖形化編程分享!

    工作以來一直從事下位機的開發(fā),對上位機了解很少。有的時候DIY時,想將下位機與上位機結合起來,但不知上位機編程怎么回事。從網上了解到一種圖形化編程語言(也叫G語言),LABVIEW就是圖形化編程
    發(fā)表于 10-20 20:15

    ZYNQ的圖形化方式建立工程

    ZYNQ的圖形化方式建立工程介紹
    發(fā)表于 01-26 06:23

    淺析Mixly圖形化編程軟件

    Mixly 是由北師大米思齊團隊開發(fā)的圖形化編程軟件,自發(fā)布以來深受國內創(chuàng)客圈的喜愛。Mixly 編程軟件采用圖形化編程,不用記代碼,只需要拖拽、簡單設置,就能讓你快速完成創(chuàng)意電子編程。本...
    發(fā)表于 08-04 07:35

    基于開源鴻蒙的圖形化編程語言 ( OpenBlock )

    該特別興趣小組定位少兒編程科普教育以圖形化編程語言為基礎,服務少兒編程、STEM 教育領域維護和制定各類設備通用的圖形化編程語言基礎向社會和教育從業(yè)者提供簡單易用的 OS 鏡像
    發(fā)表于 08-05 11:03

    Mixly圖形化編程軟件介紹

    Mixly 是由北師大米思齊團隊開發(fā)的圖形化編程軟件,自發(fā)布以來深受國內創(chuàng)客圈的喜愛。Mixly 編程軟件采用圖形化編程,不用記代碼,只需要拖拽、簡單設置,就能讓你快速完成創(chuàng)意電子編程。本...
    發(fā)表于 09-01 08:22

    求一種基于Linux的Qt圖形化MP3播放器的設計方案

    基于Linux的Qt圖形化MP3播放器有哪些模塊組成?如何去實現一種基于Linux的Qt圖形化MP3播放器的設計?
    發(fā)表于 12-23 09:48

    openharmony圖形化的編程軟件

    openharmony那些開發(fā)板,有圖形化的編程軟件嘛?
    發(fā)表于 05-05 07:43

    Qt For OpenHarmony

    的適配呢?軟通動力成都圖形框架研究院軟件開發(fā)專家蔡萬蒼在第一屆OpenHarmony技術峰會上分享了精彩觀點。 01? Qt 適配 OpenHarmony 意義
    發(fā)表于 09-15 15:39

    cpuview圖形化單片機編程軟件下載

    cpuview圖形化單片機編程軟件下載
    發(fā)表于 04-09 12:05 ?1095次下載

    Arduino教程_Arduino圖形化編程教程_ArduBlock

    Arduino教程_Arduino圖形化編程軟件_ArduBlock
    發(fā)表于 09-25 09:22 ?0次下載
    Arduino教程_Arduino<b class='flag-5'>圖形化</b>編程教程_ArduBlock

    怎樣才能縮短開發(fā)圖形化系統(tǒng)設計的時間?

    圖形化系統(tǒng)設計革命性地解決了設計問題,它將直觀的圖形化編程和靈活的商用現成(COTS)硬件融為一體,幫助工程師和科學家更有效地設計、建模、部署嵌入式系統(tǒng)。用戶通過圖形化系統(tǒng)設計,在設計的各個階段采用單一的環(huán)境,從而提高生產效率、
    發(fā)表于 07-19 07:32 ?678次閱讀
    怎樣才能縮短開發(fā)<b class='flag-5'>圖形化</b>系統(tǒng)設計的時間?

    EUV工藝不同多重圖形化方案的優(yōu)缺點及新的進展研究

    與過去相比,研究人員現在已經將EUVL作為存儲器關鍵結構的圖形化工藝的一個選項,例如DRAM的柱體結構及STT-MRAM的MTJ。在本文的第二部分,IMEC的研發(fā)工程師Murat Pak提出了幾種STT-MRAM關鍵結構的圖形化方案。
    的頭像 發(fā)表于 09-05 11:45 ?7565次閱讀

    Scratch圖形化編程軟件安裝包下載

    Scratch圖形化編程軟件安裝包下載
    發(fā)表于 06-18 09:14 ?0次下載