0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

峰会回顾第29期 | Qt For OpenHarmony

OpenHarmony TSC 来源:OpenHarmony TSC 作者:OpenHarmony TSC 2023-09-07 08:45 次阅读

演讲嘉宾 | 蔡万苍

回顾整理 | 廖 涛

排版校对 | 李萍萍

b482039e-4d17-11ee-bb52-92fbcf53809c.png

嘉宾简介

蔡万苍,13年C++/Qt开发相关工作经验,曾任职Qt公司,担任技术支持、Qt咨询师,协助国内多家Qt企业版用户完成基于Qt的软件框架搭建,参与Qt开源社区Bug维护及修改,在基于Qt框架的软件架构设计、Qt跨平台适配上有多年的技术积累和经验,开源书籍QmlBook-in-Chinese在github上star数达到1000+,现任职于软通动力信息技术(集团)股份有限公司,担任成都图形框架研究院软件开发专家角色,负责图形框架研究院的技术管理工作。

内容来源

第一届开放原子开源基金会OpenHarmony技术峰会——生态与互联分论坛

视频回顾

打开 哔哩哔哩APP 搜索 OpenHarmony-TSC 视频更清晰

正 文 内 容

在全球超过70个行业,8000家公司,100万的开发者都在使用Qt,通过Qt适配OpenHarmony,能够丰富OpenHarmony的开发生态、应用生态,加速OpenHarmony在各行业的推广使用。如何推进和完成Qt在OpenHarmony上的适配呢?软通动力成都图形框架研究院软件开发专家蔡万苍在第一届OpenHarmony技术峰会上分享了精彩观点。

b4d84c68-4d17-11ee-bb52-92fbcf53809c.png

01

Qt 适配 OpenHarmony 意义

Qt是一个C++跨平台开发框架,主要用于开发图形用户界面(Graphical User Interface,GUI)程序,具有跨平台类库(支持目前所有主流软硬件平台组合)、集成开发工具(缩短软件产品上市时间)以及跨平台集成开发环境(高生产力开发环境)等。全球超过100万研发者使用过Qt,Qt的跨平台开发能力覆盖70多个行业,是从1994年至今得到广泛的认同和验证的主流技术。

b4f7fc20-4d17-11ee-bb52-92fbcf53809c.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的行业应用推广。

02

计划贡献内容

2.1►►

适配计划

Qt按使用及部署划分,包含了设计工具、开发工具、框架必要模块、框架附加模块4个部分,基于OpenHarmony跨平台开发考虑,总体计划如下:

针对OpenHarmony的开发工具进行补充

对Qt必要模块进行适配支持

对部分Qt附加模块适配支持

b521cff0-4d17-11ee-bb52-92fbcf53809c.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工程工具实现快速的应用迁移配置

2.2►►

Qt 配套开发工具

Qt开发者通常使用Qt配套的集成开发环境Qt Creator,采用qmake或cmake进行软件工程管理配置,为方便开发者对已有软件进行移植适配,我们会开发对应的工程转换工具,将Qt的应用工程转换为DevEco Application工程,帮助开发者快速实现应用的迁移配置。

03

技术难点分享

Qt本身是跨平台的框架,我们要把它跟OpenHarmony做移植,无非考虑几个问题:一是Qt应用程序的界面如何在OpenHarmony上进行显示;OpenHarmony本身触屏的输入、鼠标/键盘的输入怎么能够把它映射到Qt本身的应用程序框架里去。需要了解Qt的QPA实现及系统接口调用的相关逻辑,就能实现Qt应用程序在OpenHarmony上的运行。

3.1►►

QPA 实现及系统接口调用

Qt平台抽象(QPA)是Qt的平台抽象层,QPA插件是通过子类化各种QPlatform*类来实现系统接口的接入,例如用于窗口系统集成的QPlatformIntegration和QPlatformWindow以及用于更深层次的平台主题化和集成的QPlatformTheme。

b530a52a-4d17-11ee-bb52-92fbcf53809c.png

QPA核心对象及作用:通过QPlatfromIntegration实现对QPA插件的对象声明周期管理,Qt GUI等模块通过Qt已完成的平台抽象层相关类实现对系统底层的调用,其中比较重要的实现类包括:EventDispatcher(实现系统底层事件接入)、BackingStore(系统图形绘制双缓存实现)、Screen(系统屏幕对象,用于管理Window显示)、Window(系统窗口对象)、InputContext(系统输入处理,包括鼠标、输入法等)、OpenGLContext(系统窗口OpenGL渲染上下文)以及Clipboard(系统剪切板)。

b54edd2e-4d17-11ee-bb52-92fbcf53809c.png

Qt Widget For OpenHarmony渲染流程:基于Qt框架自成体系的图形框架和事件系统,在OpenHarmony上基于XComponent生成的EGLSurface,采用图像二维绘制的方式在OpenGL Surface上实现双缓存渲染机制,完成Qt Widget的窗口内容渲染。

b561d0d2-4d17-11ee-bb52-92fbcf53809c.png

Qt Quick For OpenHarmony渲染流程:Qt Quick采用自成体系的Scene Graph基于OpenGL标准接口实现,QPA OpenHarmony插件基于XCompent生成EGL Surface,并通过QPA标准实现类重载实现PlatformIntegration实现与Scene Graph的OpenGLContext绑定,Qt Quick基于标准OpenGL接口在XComponent上实现图形渲染。

b5713b8a-4d17-11ee-bb52-92fbcf53809c.png

OpenHarmony Touch事件接入:基于XComponent的事件监控回调,在QPA的InputContext实现中实现对XComponent的输入监控,将监控的输入转换为Qt Event发送到Qt Event队列中,由Qt框架实现对输入的处理,完成对触屏操作和鼠标操作的处理。

b5891480-4d17-11ee-bb52-92fbcf53809c.png

基于NAPI的应用框架接口调用:基于OpenHarmony的应用接口规范,部分接口未提供NDK接口,需要通过Node.JS的C++插件NAPI调用ETS SDK的接口进行实现,QPA For OpenHarmony部分系统接口采用该种方式完成对系统接口的调用,例如系统剪切板。

b59f0b14-4d17-11ee-bb52-92fbcf53809c.png

基于TS脚本自定义符合Qt标准的对话框:Qt上层接口的QMessageBox支持系统默认样式对话框弹出,该接口在OpenHarmony的SDK中有提供,由于参数差异,无法通过NAPI直接调用,我们采用ETS语言实现后导入到DialogHelpers中进行使用。目前系统输入法采用NAPI接口进行调用,通过Custom ETS实现对系统输入法的调用进行监控,再传入Qt Input Context转换为Qt Key Event输入到Qt框架,由于输入法的高性能要求,后续会与OpenHarmony团队进行沟通,考虑开放系统底层输入法NDK接口。

b5b644f0-4d17-11ee-bb52-92fbcf53809c.png

3.2►►

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的主循环及业务逻辑。

b5c3c2ec-4d17-11ee-bb52-92fbcf53809c.png

与传统的C++应用程序不同,遵循Openharmony的北向开发应用管理,需要通过eTS框架完成应用程序C/C++应用程序main函数入口调用启动。

由于XComponent的动态创建问题,目前QPA的NAPI函数调用放在index.ets中进行调用,该问题还需要与OpenHarmony团队进行沟通,讨论基于OpenHarmony的最优解:(1)基于ETS框架自定义ETS脚本,实现XComponent的动态创建,在ETS框架下实现应用程序窗口管理;(2)基于NDK开发的XComponent的新增接口,在Qt App侧实现应用程序的窗口管理。

b5df10d8-4d17-11ee-bb52-92fbcf53809c.png

04

总结与展望

基于Qt跨平台特性及Qt For OpenHarmony的适配,能够促进OpenHarmony跨平台应用迁移及应用开发,对OpenHarmony技术生态有一定的积极作用,期待大家一块参与到Qt适配OpenHarmony的相关工作中来。

E N D

审核编辑 黄宇

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

    关注

    25

    文章

    3629

    浏览量

    16031
收藏 人收藏

    评论

    相关推荐

    高燃回顾|第三届OpenHarmony技术大会精彩瞬间

    第三届OpenHarmony技术大会圆满落幕 全球开源精英齐聚 共同展示OpenHarmony技术、生态、人才的最新进展 见证OpenHarmony南北向生态繁荣 共绘开源生态发展蓝图 星光璀璨致谢
    发表于 10-16 18:47

    第二届大会回顾25 | OpenHarmony上的Python设备应用开发

    Python以其简单、易学和功能强大而闻名,有着广泛的用户群体。采用Python开发有助于降低OpenHarmony的学习门槛。如何在OpenHarmony上用Python开发设备应用,有哪些关键技术?电
    的头像 发表于 08-27 11:53 564次阅读
    第二届大会<b class='flag-5'>回顾</b><b class='flag-5'>第</b>25<b class='flag-5'>期</b> | <b class='flag-5'>OpenHarmony</b>上的Python设备应用开发

    OpenHarmony城市技术论坛10——上海站圆满举办

    2024年8月18日下午,OpenHarmony城市技术论坛(以下简称“技术论坛”)10——上海站于上海交通大学徐汇校区圆满举办。本次技术论坛以“通用智能、通用机器人和通用操作系统”为主题,从
    的头像 发表于 08-21 09:35 221次阅读
    <b class='flag-5'>OpenHarmony</b>城市技术论坛<b class='flag-5'>第</b>10<b class='flag-5'>期</b>——上海站圆满举办

    第二届大会回顾24 | 面向OpenHarmony的软件工程研究:机遇与挑战

    随着万物智联时代的到来,OpenHarmony作为一个开源的智能终端设备操作系统的框架和平台,将会遇到哪些机遇和挑战?北京航空航天大学教授、OpenHarmony技术俱乐部主任黎立在第二届OpenHarmony技术大会上带来了精
    的头像 发表于 08-07 18:14 852次阅读
    第二届大会<b class='flag-5'>回顾</b><b class='flag-5'>第</b>24<b class='flag-5'>期</b> | 面向<b class='flag-5'>OpenHarmony</b>的软件工程研究:机遇与挑战

    OpenHarmony城市技术论坛8——厦门站圆满落幕

    2024年4月20日上午,OpenHarmony城市技术论坛(以下简称“技术论坛”)8——厦门站,在厦门大学翔安校区信息学院圆满落幕。此次论坛从“终端操作系统十大技术挑战”出发,以“存储与网络
    的头像 发表于 04-22 10:38 318次阅读
    <b class='flag-5'>OpenHarmony</b>城市技术论坛<b class='flag-5'>第</b>8<b class='flag-5'>期</b>——厦门站圆满落幕

    OpenHarmony城市技术论坛8——厦门站圆满举办

    2024年4月20日上午,OpenHarmony城市技术论坛(以下简称“技术论坛”)8——厦门站于厦门大学翔安校区信息学院圆满举办。本次技术论坛从“终端操作系统十大技术挑战”出发,以“存储与网络
    的头像 发表于 04-21 08:40 384次阅读
    <b class='flag-5'>OpenHarmony</b>城市技术论坛<b class='flag-5'>第</b>8<b class='flag-5'>期</b>——厦门站圆满举办

    第二届大会回顾15 | OpenHarmony性能调优工具介绍

    与适配,润和软件芯片业务创立人,润和芯片全栈解决方案平台HiHope发起人,带领公司进军国际芯片领域并成为ARM生态圈Linaro重要合作伙伴。OpenHarmony项目群工作委员会成员,OpenHarmony Dev-Board SIG(开发板兴趣组)创立人及组长。 视
    的头像 发表于 03-05 08:40 544次阅读
    第二届大会<b class='flag-5'>回顾</b><b class='flag-5'>第</b>15<b class='flag-5'>期</b> | <b class='flag-5'>OpenHarmony</b>性能调优工具介绍

    Qt For OpenHarmony图形化的进展突破

    Qt 适配 OpenHarmony 意义 Qt 是一个 C++ 跨平台开发框架,主要用于开发图形用户界面(Graphical User Interface,GUI)程序,具有跨平台类库(支持目前
    的头像 发表于 02-02 14:29 1320次阅读
    <b class='flag-5'>Qt</b> For <b class='flag-5'>OpenHarmony</b>图形化的进展突破

    OpenHarmony城市技术论坛——6(武汉站)圆满举办

    点击蓝字 ╳ 关注我们 开源项目 OpenHarmony 是每个人的 OpenHarmony 2023年12月23日下午,OpenHarmony城市技术论坛(以下简称“技术论坛”)——
    的头像 发表于 12-26 21:20 699次阅读
    <b class='flag-5'>OpenHarmony</b>城市技术论坛——<b class='flag-5'>第</b>6<b class='flag-5'>期</b>(武汉站)圆满举办

    第二届大会回顾6 | OpenHarmony游戏生态建设

    Turbo黑科技核心成员,在OpenHarmony社区上担任开源图形驱动SIG、游戏SIG、兼容性工作组组长等职务。 视频回顾   打开哔哩哔哩APP,观看更清晰视频 正文内容 游戏作为一种大众娱乐方式越来越被人们所接受,影响着人们的日常生活。大部分手机、平板、电脑甚至
    的头像 发表于 12-26 08:36 360次阅读
    第二届大会<b class='flag-5'>回顾</b><b class='flag-5'>第</b>6<b class='flag-5'>期</b> | <b class='flag-5'>OpenHarmony</b>游戏生态建设

    OpenHarmony城市技术论坛——6(武汉站)圆满举办

    2023年12月23日下午,OpenHarmony城市技术论坛(以下简称“技术论坛”)——6(武汉站)于华中科技大学梧桐语问学中心明德报告厅圆满举办。本次技术论坛从“终端操作系统十大技术挑战
    的头像 发表于 12-25 08:42 636次阅读
    <b class='flag-5'>OpenHarmony</b>城市技术论坛——<b class='flag-5'>第</b>6<b class='flag-5'>期</b>(武汉站)圆满举办

    第二届大会回顾3 | 深开鸿基于OpenHarmony的多内核混合部署方案

    华为、蚂蚁金服从事自研操作系统、核心分布式关系数据库研发,曾在小马智行从事机器学习基础设施研发,目前在深开鸿从事操作系统基础架构探索与竞争力构建。 视频回顾   打开哔哩哔哩APP,观看更清晰视频 正文内容 OpenHarmony是一个面向全场景、全连接、全智
    的头像 发表于 12-12 14:32 1254次阅读
    第二届大会<b class='flag-5'>回顾</b><b class='flag-5'>第</b>3<b class='flag-5'>期</b> | 深开鸿基于<b class='flag-5'>OpenHarmony</b>的多内核混合部署方案

    第二届大会回顾2 | 视觉大模型在OpenHarmony的端边侧应用

    演讲嘉宾 | 张兆生 回顾整理 | 廖   涛 排版校对 | 李萍萍 嘉宾介绍  OS原生智能分论坛  张兆生 ,OpenHarmony项目群技术指导委员会委员、中软国际智能物联网军团产品与研发管理
    的头像 发表于 12-12 14:30 758次阅读

    罗姆(ROHM)4代:技术回顾

    罗姆(ROHM)4代:技术回顾
    的头像 发表于 11-28 17:02 671次阅读
    罗姆(ROHM)<b class='flag-5'>第</b>4代:技术<b class='flag-5'>回顾</b>

    高能回顾 | 首届OpenHarmony竞赛训练营精彩瞬间

    点击视频回顾竞赛精彩瞬间! ↓↓↓ 根深叶茂,众行者远,期待下一次相聚! 原文标题:高能回顾 | 首届OpenHarmony竞赛
    的头像 发表于 11-11 21:10 469次阅读