> 技术文档 > DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙


文章目录

  • 1.安装DevEco
  • 2.注意事项
    • 2.1.修改module.json5(超级重要)
    • 2.2.adapter_ts
      • 2.2.1.adapter_ts的下载信息在官方wiki的附录章节中:
      • 2.2.2. 在上面那个位置已经找不到了,需要到项目附件中下载
    • 2.3.无法使用opengl或者OpenGLFunctions_2_1
    • 2.4.手机插到电脑后,DevEco无法识别
    • 2.5.Qt读取rawfile路径下的文件
    • 2.6. code:9568404 error: delivery sign profile failed
    • 2.7.使用Qt3d时需要注意的事情
    • 2.8.设置APP图标及名称
    • 2.9. managed by isoftstone水印
    • 2.10. 使用qml
    • 2.10. 修改包名称(程序名称)
    • 2.10. 申请权限
    • 2.11.写文件

本文主要是起到查漏补缺、注意事项的说明。具体详细的操作步骤,可以看我的另外一篇文章【利用DevEco Studio对RK3588的HiHopesOS-4.1.110(OpenHarmony)进行Qt程序编写】。
但是假如你用的是最新的系统,可能按照教程操作手册【基于DevEco的Qt工程配置】(或者其提供的例程工程)来操作就可以了。我手头上只有旧系统的设备,新系统还没测试过,不太清楚。

1.安装DevEco

不要用最新版的DevEco,而是要用教程【基于DevEco的Qt工程配置】中提到的4.1.0.400版本。不然各种问题没法找答案。(华为官方的DevEco下载页面已经找不到5.0以下的版本了,因此需要到这里去【OpenHarmony 4.1 Release】下载这个4.1 release版本)
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

找了一下资料,官方(也可能是社区)人员已经做过了Qt的移植。
下载了【Qt For OpenHarmony Alpha v6版本】后,按照他们的操作手册【基于DevEco的Qt工程配置】来操作就可以了
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

2.注意事项

但是,可能会遇到一些问题。这里记录一下。

2.1.修改module.json5(超级重要)

MyApplication/entry/src/main/module.json5
里面的srcEntry由原来的EntryAbility.ts改成 EntryAbility.ets,不然启动的还是旧的入口,而不是咱们从qt拷贝过来的入口。

\"srcEntry\": \"./ets/entryability/EntryAbility.ets\",

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

2.2.adapter_ts

假如用的是DevEco Studio 5.x,就不需要这个了,按照库的文档操作即可,假如用4.x,那就需要用到这个,请根据自己的情况决定

2.2.1.adapter_ts的下载信息在官方wiki的附录章节中:

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

2.2.2. 在上面那个位置已经找不到了,需要到项目附件中下载

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

【adapter_ts】

假如按照文档中介绍的,导入adapter_ts模块后,会报这个错误:

Cannot find module \'adapter_ts\' or its corresponding type declarations.

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙有人也遇到这个问题【基于DevEco的Qt工程编程提示Cannot find module ‘adapter_ts’ or its corresponding type declarations. 】。但是我按照官方的人的回复

开发者你好,可以参考wiki文档《测试工程使用说明》中的编辑配置章节设置Auto Dependencies

并不能解决这个问题。
最后我是参考这里【OpenHarmony—开发及引用动态共享包】,解决掉这个问题的。
在对adapter_ts模型进行引入、编译之后,会在其build目录下得到一个adapter_ts.har,不用动他,留它在这里
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

然后在主模块的oh-package.json5文件中的dependencies属性中,引入adapter_ts。

 \"dependencies\": { \"libqtmodule.so\": \"file:./src/main/cpp/types/libqtmodule\", \"adapter_ts\": \"file:../adapter_ts\" },

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙添加这句后,IDE会报一个错误,然后自动给出方案,说什么ohpm install之类的,点击应用即可。

2.3.无法使用opengl或者OpenGLFunctions_2_1

原因是此时HarmonyOS使用的是opengl es2及es3的接口【对Qt OpenGL的适配 】
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙而当定义了openglES2之后,下面这一句就会为fasle,从而屏蔽整个OpenGLFunctions_2_1类

#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙因此,以后统一用OpenGLFunctions就好了。因为OpenGLFunctions里面的函数是GLES2 + OpenGL1通用子集

// GLES2 + OpenGL1 common subset

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

2.4.手机插到电脑后,DevEco无法识别

我的手机是HarmonyOS 3.0的。插到电脑后,DevEco的Device列表中没有识别到我的手机。
哪怕按照这里的设置了也还是不行。【[经验分享] Deveco3.1连接华为Mate30Pro 5G显示No Device解决法】
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙暂时不知道怎么解决。

2.5.Qt读取rawfile路径下的文件

【Qt 应用中获得rawfile 全路径的方法 】

好的,OpenHarmony Qt也提供了QFile读rawfile文件的功能。比如QFile file(“rawfile:/xxx.txt”)

2.6. code:9568404 error: delivery sign profile failed

【创建一个5.0版本的OH项目,运行一直报错Install Failed: error: failed to install bundle. code:9568404 error: delivery sign profile failed 】

2.7.使用Qt3d时需要注意的事情

a.要加入Concurrent模块,否则会报错
b.要将plugins/renderers/libplugins_renderers_openglrenderer.so拷贝到lib中,否则会报找不到opengl渲染插件
c.将rawfile下面的Qt文件夹拷贝一份到arm64-v8a处。因为

注意:因为openharmony系统路径访问权限问题,在新系统中对MQL插件加载路径进行了限制,因此需要将QML相关资源再次拷贝一份到\\entry\\libs\\arm64-v8a目录下
资料来源【拷贝qml资源文件】

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

2.8.设置APP图标及名称

DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

【鸿蒙设置,修改APP图标和名称】

2.9. managed by isoftstone水印

不方便说太多,看图:
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

2.10. 使用qml

rawfile、arm64a-v8a这两个地方都要保证有这个Qt/qml的文件夹。
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

2.10. 修改包名称(程序名称)

系统主要是根据bundleName是不是同一个程序。
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

2.10. 申请权限

目前在弄的程序需要用到网络权限,因此需要申请网络权限,权限在module.json5中申请
DevEco Studio中使用Qt,编写HarmonyOS程序_qt 鸿蒙

 \"requestPermissions\": [ { \"name\": \"ohos.permission.INTERNET\", } ],

2.11.写文件

假如写文件的话(比如ini文件),基本都是在程序的沙箱中进行 /data/storage/el1/base/
也就是说,所有自己管理的文件都要以 /data/storage/el1/base/为开头,比如我想保存个ini文件,就可以创建一个路径 /data/storage/el1/base/files,然后保存 /data/storage/el1/base/files/sys.ini


参考:
【Qt for OpenHarmony 开发环境搭建笔记】
【OpenHarmony—开发及引用动态共享包】
【基于DevEco的Qt工程配置】