演讲嘉宾 | 蔡万苍
回顾整理 | 廖 涛
排版校对 | 李萍萍
嘉宾简介
蔡万苍,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技术峰会上分享了精彩观点。
01►
qt 适配 openharmony 意义
qt是一个c++跨平台开发框架,主要用于开发图形用户界面(graphical user interface,gui)程序,具有跨平台类库(支持目前所有主流软硬件平台组合)、集成开发工具(缩短软件产品上市时间)以及跨平台集成开发环境(高生产力开发环境)等。全球超过100万研发者使用过qt,qt的跨平台开发能力覆盖70多个行业,是从1994年至今得到广泛的认同和验证的主流技术。
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附加模块适配支持
具体工作如下:
成立 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。
qpa核心对象及作用:通过qplatfromintegration实现对qpa插件的对象声明周期管理,qt gui等模块通过qt已完成的平台抽象层相关类实现对系统底层的调用,其中比较重要的实现类包括:eventdispatcher(实现系统底层事件接入)、backingstore(系统图形绘制双缓存实现)、screen(系统屏幕对象,用于管理window显示)、window(系统窗口对象)、inputcontext(系统输入处理,包括鼠标、输入法等)、openglcontext(系统窗口opengl渲染上下文)以及clipboard(系统剪切板)。
qt widget for openharmony渲染流程:基于qt框架自成体系的图形框架和事件系统,在openharmony上基于xcomponent生成的eglsurface,采用图像二维绘制的方式在opengl surface上实现双缓存渲染机制,完成qt widget的窗口内容渲染。
qt quick for openharmony渲染流程:qt quick采用自成体系的scene graph基于opengl标准接口实现,qpa openharmony插件基于xcompent生成egl surface,并通过qpa标准实现类重载实现platformintegration实现与scene graph的openglcontext绑定,qt quick基于标准opengl接口在xcomponent上实现图形渲染。
openharmony touch事件接入:基于xcomponent的事件监控回调,在qpa的inputcontext实现中实现对xcomponent的输入监控,将监控的输入转换为qt event发送到qt event队列中,由qt框架实现对输入的处理,完成对触屏操作和鼠标操作的处理。
基于napi的应用框架接口调用:基于openharmony的应用接口规范,部分接口未提供ndk接口,需要通过node.js的c++插件napi调用ets sdk的接口进行实现,qpa for openharmony部分系统接口采用该种方式完成对系统接口的调用,例如系统剪切板。
基于ts脚本自定义符合qt标准的对话框:qt上层接口的qmessagebox支持系统默认样式对话框弹出,该接口在openharmony的sdk中有提供,由于参数差异,无法通过napi直接调用,我们采用ets语言实现后导入到dialoghelpers中进行使用。目前系统输入法采用napi接口进行调用,通过custom ets实现对系统输入法的调用进行监控,再传入qt input context转换为qt key event输入到qt框架,由于输入法的高性能要求,后续会与openharmony团队进行沟通,考虑开放系统底层输入法ndk接口。
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的主循环及业务逻辑。
与传统的c++应用程序不同,遵循openharmony的北向开发应用管理,需要通过ets框架完成应用程序c/c++应用程序main函数入口调用启动。
由于xcomponent的动态创建问题,目前qpa的napi函数调用放在index.ets中进行调用,该问题还需要与openharmony团队进行沟通,讨论基于openharmony的最优解:(1)基于ets框架自定义ets脚本,实现xcomponent的动态创建,在ets框架下实现应用程序窗口管理;(2)基于ndk开发的xcomponent的新增接口,在qt app侧实现应用程序的窗口管理。
04►
总结与展望
基于qt跨平台特性及qt for openharmony的适配,能够促进openharmony跨平台应用迁移及应用开发,对openharmony技术生态有一定的积极作用,期待大家一块参与到qt适配openharmony的相关工作中来。
e n d
极低温、强磁场二维扫描压电纳米定位平台的介绍
韩国将终止2G网络以全面发展5G
华为mate10即将发布,华为mate9价格大跳水,全能旗舰华为Mate9有多强?
虚拟现实技术分类
安蒙先生推出高通骁龙8cx第二代5G计算平台
峰会回顾第29期 | Qt For OpenHarmony
昆虫的耳朵激发研究人员打造微型3D打印麦克风的设计灵感
高端UV-C LED芯片供应紧张,需求预计将持续到2022年
全新圣达菲7最新消息:值得众泰和陆风学习的SUV,预将于今年第三季度正式上市!
买二手设备时要问的十个问题
电话机器人为什么这么火,其中的原因是什么
动力电池挤压试验机使用注意事项-电池安全测试设备
搭载Exynos 980 5G Soc新机跑分发布,硬件配置信息曝光
中国焊接机器人市场的进出口情况分析
利用光信息实现神经网络计算是怎么一回事
详解高效散热的MOSFET顶部散热封装
Sprint正在打造Curiosity IoT平台该平台将于2018年底投入商用
明明是新机器 为什么苹果和微软老是用旧款处理器?
中国移动将聚焦14个重点行业打造100个5G应用助力行业数字化转型
心率监测/健身监测设备走向无线化