首页| 论坛| 消息

标题:Qt安卓开发经验011-020
作者:liudianwu
日期:2022-04-07 14:38
内容:

11. 安卓中一个界面窗体对应一个Activity,多个界面就有多个Activity,而在Qt安卓程序中,Qt这边只有一个Activity那就是QtActivity(包名全路径 org.qtproject.qt5.android.bindings.QtActivity),这个QtActivity是固定的写好的,整个Qt程序都是在这个QtActivity界面中。你打开AndroidManifest.xml文件可以看到对应节点有个name=org.qtproject.qt5.android.bindings.QtActivity,所以如果要让Qt程序能够更方便通畅的与对应的java类进行交互(需要上下文传递Activity的,比如震动,消息提示等),建议新建一个java类,继承自QtActivity即可,这样相当于默认Qt启动的就是你java类中定义的Activity,可以很好的控制和交互。
12. 由于AndroidManifest.xml文件每个程序都可能不一样,为了做成通用的组件,这就要求可能不能带上AndroidManifest.xml文件,这样的话每个Qt安卓程序都启动默认内置的Activity,如果依赖Activity上下文的执行函数需要传入Qt的Activity才行,这里切记Qt的Activity包名是 Lorg/qtproject/qt5/android/bindings/QtActivity; 之前顺手想当然的写的 Landroid/app/Activity; 发现死活不行,原来是包名错了。
13. 一个Qt安卓程序中可以有多个Java类,包括继承自Activity的类(这样的Activity可以通过QtAndroid::startActivity函数来调用),但是只能有一个通过AndroidManifest.xml文件指定的Activity,不指定会默认一个。如果java类中不需要拿到Qt的Activity进行处理的,可以不需要继承任何Activity,比如全部是运算的静态函数。
14. 在java类中如果上面没有主动引入包名,则下面需要写全路径,引入了则不需要全路径可以直接用(包括枚举值都可以直接写,比如 VIBRATOR_SERVICE 这种枚举值引入了包名后不需要写android.content.Context.VIBRATOR_SERVICE),建议引入包名,比如上面写了 import org.qtproject.qt5.android.bindings.QtActivity; 则下面继承类可以直接写 public class QtAndroidActivity extends QtActivity,如果没有引入则需要写成 public class QtAndroidActivity extends org.qtproject.qt5.android.bindings.QtActivity 。
15. 建议搭配 android studio 工具开发,因为在 android studio 中写代码都有自动语法提示,包名会提示自动引入,可以查看有那些函数方法等,还可以校验代码是否正确,而如果在QtCreator中手写有时候可能会写错,尤其是某个字母写错,当然这种错误是编译通不过的,会提示错误在哪行。
16 ..

回复 发表
主题 版块