衡阳派盒市场营销有限公司

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

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

3天內不再提示

Qt For OpenHarmony圖形化的進展突破

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

Qt 適配 OpenHarmony 意義

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

wKgZomUECciALXOFAAD6MIyfhD8750.png


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 附加模塊適配支持

wKgZomUECc-ADXz3AADyrFznN7c223.png


具體工作如下:

成立 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。

wKgaomW8iZ-APLBRAAHy6nFkeG0215.png

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

wKgZomW8ibSAOiNHAAIeW-zVhxQ042.png


Qt Widget For OpenHarmony 渲染流程:基于 Qt 框架自成體系的圖形框架和事件系統,在 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 的事件監控回調,在 QPA 的 InputContext 實現中實現對 XComponent 的輸入監控,將監控的輸入轉換為 Qt Event 發送到 Qt Event 隊列中,由 Qt 框架實現對輸入的處理,完成對觸屏操作和鼠標操作的處理。

wKgaomW8i7WAeHeNAAD7MkKCBlA214.pngwKgZomW8in2ABHRSAAD7MkKCBlA379.png

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

wKgaomW8i7aAKz8-AADxvIXr7Vw468.pngwKgaomW8ityAP2S5AADxvIXr7Vw276.png

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

wKgZomW8i7eAd9kFAAEYoXx7qAw822.pngwKgZomW8iuWAP8miAAEYoXx7qAw316.png

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 的主循環及業務邏輯。

wKgaomW8i2-AbVNsAAGxOlwcg-I212.png

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

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

wKgaomW8i4SAWba1AAE8DjHWOgA300.pngwKgZomW8i7eAcLdnAAE8DjHWOgA244.png

總結與展望

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


審核編輯 黃宇

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

    關注

    57

    文章

    2392

    瀏覽量

    43055
  • OpenHarmony
    +關注

    關注

    25

    文章

    3747

    瀏覽量

    16581
收藏 人收藏

    評論

    相關推薦

    [分享]圖形化系統的設計

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

    圖形化編程

    圖形化編程語言的線型如何區分
    發表于 05-24 13:57

    labview圖形化編程分享!

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

    ZYNQ的圖形化方式建立工程

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

    淺析Mixly圖形化編程軟件

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

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

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

    Mixly圖形化編程軟件介紹

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

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

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

    openharmony圖形化的編程軟件

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

    Qt For OpenHarmony

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

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

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

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

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

    怎樣才能縮短開發圖形化系統設計的時間?

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

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

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

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

    Scratch圖形化編程軟件安裝包下載
    發表于 06-18 09:14 ?0次下載
    百家乐路单规则| 大发888容易赢吗| 网上百家乐官网赢钱公式| 模拟百家乐游戏软件| 投注网| 瑞士百家乐官网的玩法技巧和规则| 老虎机批发| 百家乐官网鞋业| 威尼斯人娱乐城客户端| 百家乐官网赢赌场百家乐官网| 百家乐mediacorp| 铁力市| A8百家乐娱乐网| 网上玩百家乐官网好吗| 百家乐食杂店| 永利博百家乐官网现金网| 24山向吉凶| 东方明珠线上娱乐| 百家乐开放词典新浪| 百家乐官网视频交流| 真人百家乐游戏软件| 南宁百家乐官网赌机| 百家乐娱乐网网77scs| 棋牌百家乐官网赢钱经验技巧评测网| 单机百家乐游戏下| 自贡百家乐官网娱乐场开户注册| 在线棋牌游戏平台| 百家乐转盘技巧| 百家乐官网路子分析| A8百家乐娱乐场| 金盾百家乐官网网址| 大发888博彩网站xa11| 属火的在属土的方向做生意好不好| 金阳县| 百家乐庄闲必胜打| 如何赢百家乐官网的玩法技巧和规则| 娱乐城图片| 免费下百家乐赌博软件| 百家乐官网水晶筹码| 大发888免费下载| 百家乐真人视屏游戏|