文章目录
本文主要是起到查漏补缺、注意事项的说明。具体详细的操作步骤,可以看我的另外一篇文章【利用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版本)
找了一下资料,官方(也可能是社区)人员已经做过了Qt的移植。
下载了【Qt For OpenHarmony Alpha v6版本】后,按照他们的操作手册【基于DevEco的Qt工程配置】来操作就可以了
2.注意事项
但是,可能会遇到一些问题。这里记录一下。
2.1.修改module.json5(超级重要)
将MyApplication/entry/src/main/module.json5
里面的srcEntry
由原来的EntryAbility.ts改成 EntryAbility.ets,不然启动的还是旧的入口,而不是咱们从qt拷贝过来的入口。
"srcEntry": "./ets/entryability/EntryAbility.ets",
2.2.adapter_ts
假如用的是DevEco Studio 5.x,就不需要这个了,按照库的文档操作即可,假如用4.x,那就需要用到这个,请根据自己的情况决定
2.2.1.adapter_ts的下载信息在官方wiki的附录章节中:
2.2.2. 在上面那个位置已经找不到了,需要到项目附件中下载
假如按照文档中介绍的,导入adapter_ts模块后,会报这个错误:
Cannot find module 'adapter_ts' or its corresponding type declarations.
有人也遇到这个问题【基于DevEco的Qt工程编程提示Cannot find module ‘adapter_ts’ or its corresponding type declarations. 】。但是我按照官方的人的回复
开发者你好,可以参考wiki文档《测试工程使用说明》中的编辑配置章节设置Auto Dependencies
并不能解决这个问题。
最后我是参考这里【OpenHarmony—开发及引用动态共享包】,解决掉这个问题的。
在对adapter_ts模型进行引入、编译之后,会在其build目录下得到一个adapter_ts.har
,不用动他,留它在这里。
然后在主模块的oh-package.json5文件中的dependencies属性中,引入adapter_ts。
"dependencies": {
"libqtmodule.so": "file:./src/main/cpp/types/libqtmodule",
"adapter_ts": "file:../adapter_ts"
},
添加这句后,IDE会报一个错误,然后自动给出方案,说什么ohpm install之类的,点击应用即可。
2.3.无法使用opengl或者OpenGLFunctions_2_1
原因是此时HarmonyOS使用的是opengl es2及es3的接口【对Qt OpenGL的适配 】
而当定义了openglES2之后,下面这一句就会为fasle,从而屏蔽整个OpenGLFunctions_2_1类
#if !defined(QT_NO_OPENGL) && !defined(QT_OPENGL_ES_2)
因此,以后统一用OpenGLFunctions就好了。因为OpenGLFunctions里面的函数是GLES2 + OpenGL1通用子集
// GLES2 + OpenGL1 common subset
2.4.手机插到电脑后,DevEco无法识别
我的手机是HarmonyOS 3.0的。插到电脑后,DevEco的Device列表中没有识别到我的手机。
哪怕按照这里的设置了也还是不行。【[经验分享] Deveco3.1连接华为Mate30Pro 5G显示No Device解决法】
暂时不知道怎么解决。
2.5.Qt读取rawfile路径下的文件
好的,OpenHarmony Qt也提供了QFile读rawfile文件的功能。比如QFile file(“rawfile:/xxx.txt”)
2.6. 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资源文件】
2.8.设置APP图标及名称
2.9. managed by isoftstone水印
不方便说太多,看图:
2.10. 使用qml
rawfile、arm64a-v8a这两个地方都要保证有这个Qt/qml的文件夹。
2.10. 修改包名称(程序名称)
系统主要是根据bundleName
是不是同一个程序。
2.10. 申请权限
目前在弄的程序需要用到网络权限,因此需要申请网络权限,权限在module.json5中申请
"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工程配置】