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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt For OpenHarmony圖形化的進(jìn)展突破

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

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 年至今得到廣泛的認(rèn)同和驗證的主流技術(shù)。

wKgZomUECciALXOFAAD6MIyfhD8750.png


Qt 適配 OpenHarmony 有什么意義?

一、擴大 OpenHarmony 開發(fā)者陣營:基于 Qt 跨平臺特性及 Qt For OpenHarmony 的適配,吸引數(shù)量龐大的 Qt 開發(fā)人員在 OpenHarmony 上進(jìn)行跨平臺應(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)用推廣。

計劃貢獻(xiàn)內(nèi)容

適配計劃

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

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

對 Qt 必要模塊進(jìn)行適配支持

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

wKgZomUECc-ADXz3AADyrFznN7c223.png


具體工作如下:

成立 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 進(jìn)行軟件工程管理配置,為方便開發(fā)者對已有軟件進(jìn)行移植適配,我們會開發(fā)對應(yīng)的工程轉(zhuǎn)換工具,將 Qt 的應(yīng)用工程轉(zhuǎn)換為 DevEco Application 工程,幫助開發(fā)者快速實現(xiàn)應(yīng)用的遷移配置。

技術(shù)難點分享

Qt 本身是跨平臺的框架,我們要把它跟 OpenHarmony 做移植,無非考慮幾個問題:一是 Qt 應(yīng)用程序的界面如何在 OpenHarmony 上進(jìn)行顯示;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。

wKgaomW8iZ-APLBRAAHy6nFkeG0215.png

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)剪切板)。

wKgZomW8ibSAOiNHAAIeW-zVhxQ042.png


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

wKgZomW8ieiAQPjFAADPoP3Ng6g445.pngwKgaomW8i7SAH89cAADPoP3Ng6g786.png

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)圖形渲染。

wKgZomW8i7SAfuLhAADN22nycpk929.pngwKgaomW8ijaABa2AAADN22nycpk938.png

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)操作的處理。

wKgaomW8i7WAeHeNAAD7MkKCBlA214.pngwKgZomW8in2ABHRSAAD7MkKCBlA379.png

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

wKgaomW8i7aAKz8-AADxvIXr7Vw468.pngwKgaomW8ityAP2S5AADxvIXr7Vw276.png

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

wKgZomW8i7eAd9kFAAEYoXx7qAw822.pngwKgZomW8iuWAP8miAAEYoXx7qAw316.png

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ù)邏輯。

wKgaomW8i2-AbVNsAAGxOlwcg-I212.png

與傳統(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 中進(jìn)行調(diào)用,該問題還需要與 OpenHarmony 團(tuán)隊進(jìn)行溝通,討論基于 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)用程序的窗口管理。

wKgaomW8i4SAWba1AAE8DjHWOgA300.pngwKgZomW8i7eAcLdnAAE8DjHWOgA244.png

總結(jié)與展望

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


審核編輯 黃宇

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

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42485
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3548

    瀏覽量

    15736
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    圖形化編程

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

    labview圖形化編程分享!

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

    ZYNQ的圖形化方式建立工程

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

    淺析Mixly圖形化編程軟件

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

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

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

    Mixly圖形化編程軟件介紹

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

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

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

    openharmony圖形化的編程軟件

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

    Qt For OpenHarmony

    的適配呢?軟通動力成都圖形框架研究院軟件開發(fā)專家蔡萬蒼在第一屆OpenHarmony技術(shù)峰會上分享了精彩觀點。 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)設(shè)計的時間?

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

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

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

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

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