QT for android(编程思路,初学者可以看下)

由于单位是屌丝单位,什么都自己来,领导说你来搞个APP吧,作为一名c++程序员无奈了,经过两天的考察,还是使用了自己较为熟悉的QT好了,那么便开始了QT FOR ANDROID的编程。既然浅析,那什么都聊聊。
1.配置环境,QT FOR ANDROID采用的JNI接口实现的,本身最后到平台上还是翻译成本地语言,那么便是JDK,SDK,NDK这三样,另外还需要一个JAVA打包的东西ant。

2.QML界面过渡,采取QML而不是QWidget,大体上就是自己想这是移动端的编程采用QWidget是不是有点把东西做成PC端的感觉?这样好土鳖,再就是QML一旦上手以后,完全是你怎么想就可以写,绚丽的效果,很快的速度,我问过很多写QML的人,大多都是自己完全手写,拖控件这种又卡又不自由,QML很自由的哦,再就是QML本身确实适用于触屏开发的开发,比如Flickable的弹性页面就很适合触屏的感觉,通过自带的一些信号,完全可以做到那种什么下拉刷新的触屏特有的东西。

        再就是界面过渡主要有三种方式CreateCompent,Loader,Stackview,个人推荐第三种,第三种本身的话自带过渡特效,页面焦点处理的肯定合你的心意,系统本身做了很多的事情,CreateCompent这种适用于只有两层UI的时候,太多的就会很复杂。Loader这种没怎么用过,感觉页面切换的时候切的比CreateCompent还要诡异。而且这两种本身的页面焦点会有问题,具体的就是当你处理安卓返回键事件的时候就懂了,那可是相当的苦逼。

3.QML编程的思路,我来说点QML和c++混合编程的思路吧,首先你可以把QML看成一个类的概念,Component.onCompleted 就是构造函数的概念(在这里我也不说什么c++注册到QML之类的基本概念了,我就是谈下思路),首先一般的,我会由这个地方入手,调用我c++的初始化函数,这个c++方法主要是由于产生页面可用的数据,那么此时我们就在页面的DOM产生后(DOM这个概念是我自己提的,参照WEB编程的概念),数据加载前,进入了c++的方法,这个时候就是大家熟悉的c++了,这个时候你可以做HTTP请求数据咯,也可以解析数据,也可以做些复杂的逻辑,这个时候,然后呢,这个时候你把事情做完了,一般来说,对于涉及UI方面的处理都是异步的方式,为了防止界面卡死,就是大MFC常说的工作者线程和UI线程的概念的。那么这个时候,我的页面到底是什么去做给页面赋值呢?这个时候我的做法就是在Connecting中去处理,在Connecting中我的槽函数收到了前台的信号,然后在这个槽函数中我将会调用完成赋值,(小技巧,我会在这里再去调用一个Q_INVOKE函数去完成具体的数据返回,而不是用信号附带的形参,因为很多时候这个数据比较复杂,我只是希望我什么时候可以掉这个函数而已),QML和c++交互主要是用元对象的方式去实现的(有兴趣的同学可以具体了解下,反正我是不求甚解了),好了我们的数据到底在什么赋值也解决了,整个编程的头由Component.onCompleted开启,尾由Connecting完成,我们这就算打完收工了。

4.qt 和安卓,我们最后再谈谈具体的涉及到安卓系统方面的问题,首先我对于安卓完全门外汉哈,我们先从那个文件AndroidManifest.xml说起,首先,这个配置文件关系APP的横屏禁用有个标签可以实现,APP的升级(android:versionName="1.0" android:versionCode="1"),还有APP的名称,名字,图标都是在这里去处理,做法比较简单。安卓之中的activity概念有点像QML中的Rectangle(我的理解哈),在activity中有个标签android:name这里就是你程序的入口了,那么可以说你所有的程序本质其实就是去实现了这个name。
           QT跨平台最大的问题就是系统操作了,比如我想去实现一个自动安装,或者调用手机WIFI,或者调用手机摄像头,那么此时就必须要使用原生API了,公司有条件的就有JAVA同事帮你写,你调调就好了,条件不好的就心酸了,得自己上了,唉。那么在工程中我们安卓文件添加进来以后,就可以采用JNI技术去掉用这些JAVA方法了!这样我们的QT也可以做到安卓所能做到的一切事情。这个时候你会说我还要调JAVA算什么呢?QT的本身是跨平台的,换句话说只要用我原来的工程的大部分代码我就可以实现移植到IOS系统上。这样就是基本上一套代码。两个平台都可以用了。
       以上就是我做开发的一些心得了。

你可能感兴趣的:(android,qt,跨平台,qml)