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 的相关工作中来。


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    55

    文章

    2162

    浏览量

    42289
  • OpenHarmony
    +关注

    关注

    24

    文章

    3491

    浏览量

    15448
收藏 人收藏

    评论

    相关推荐

    [分享]图形化系统的设计

    图形化系统的设计 商用现成建模平台如前所述,由于许多设计延迟或是根本无法面市,甚至更糟;由于设计会在推出之后宣告失败,我们必须采取行动,确保以更短的时间获得更优质的产品。一举两得
    发表于 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 625次阅读
    怎样才能缩短开发<b class='flag-5'>图形化</b>系统设计的时间?

    EUV工艺不同多重图形化方案的优缺点及新的进展研究

    与过去相比,研究人员现在已经将EUVL作为存储器关键结构的图形化工艺的一个选项,例如DRAM的柱体结构及STT-MRAM的MTJ。在本文的第二部分,IMEC的研发工程师Murat Pak提出了几种STT-MRAM关键结构的图形化方案。
    的头像 发表于 09-05 11:45 7370次阅读

    Scratch图形化编程软件安装包下载

    Scratch图形化编程软件安装包下载
    发表于 06-18 09:14 0次下载