欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Qt for Android开发实例教程

程序员文章站 2022-04-30 23:03:04
本文讲述了使用qt5.3.0开发android应用的方法,由于官方资料较少,此处记录开发过程遇到的问题及解决方法。具体步骤如下: 1.android平台的视频播放,只能使...

本文讲述了使用qt5.3.0开发android应用的方法,由于官方资料较少,此处记录开发过程遇到的问题及解决方法。具体步骤如下:

1.android平台的视频播放,只能使用qml的mediaplayer

2.qml中控件的路径必须加file://  例如:

image{
  source: "file:///mnt/usbhost1/config/logo.png"
}

3.c++与qml中js的方法互调

qquickview view;
view.setsource(qurl(qstringliteral("qrc:///qml/mainview.qml")));
qobject *qmlobj =(qobject*) view.rootobject();
mainwnd *w=new mainwnd(object);
//暴露c++类给qml供其调用,别名mainwndclass
view.engine ()->rootcontext ()->setcontextproperty (qlatin1string("mainwndclass"),w);

//c++调用qml中的js方法
//参数必须转换为qvariant
qmetaobject::invokemethod (qmlobj,"showright",q_arg(qvariant,1));
//调用子项的js方法
qmlplayer = qmlobj->findchild<qobject*>("playerarea");
qmetaobject::invokemethod (qmlplayer,"setvideofile",q_arg(qvariant,currentvideofile));

//mainview.qml
rectangle {
  anchors.fill: parent
  property int leftareawidth: this.width/5*4
  property int rightareawidth: this.width/5
  property int queuefontsize
  function showright(isshow){
    ....
  }
  player{
    id:playerarea
    //设置objectname,在c++中才能找到它
    objectname: "playerarea"
    width: parent.width
    height: parent.height
  }
}

4.c++调用java android api

在项目目录下建立目录\android\src\org\rophie\projectname\javaclass.java 

org\rophie\projectname即为java类的包名package org.rophie.projectname;

如我调用android api调节系统音量

package org.rophie.projectname;
import org.qtproject.qt5.android.bindings.qtactivity;
import android.widget.toast;
import android.media.audiomanager;
import android.content.context;
public class javaclass extends qtactivity{
  private static javaclass m_instance;
  private static audiomanager maudiomanager;
  public javaclass()
  {
    //构造函数必须
    m_instance = this;
  }
   public static void setvolume(int vol){
   if(maudiomanager==null){
     maudiomanager = (audiomanager)m_instance.getsystemservice(context.audio_service);
   }
     maudiomanager.setstreamvolume(audiomanager.stream_music, vol, 0);
   }
}

c++调用:

qandroidjniobject::callstaticmethod<void>("org/rophie/projectname/javaclass","setvolume","(i)v",3);

 
//具体参照qandroidjniobject类

5.broadcastreceiver实现开机自启,和android一模一样

public void onreceive(context context, intent intent) {
 ......
 //javaclass为继承qtactivity的java主类
 intent intent2 = new intent(context, javaclass.class);
 ......
}

6.调用第三方jar包,在src同级目录下新建目录libs,将.jar拷入即可使用

希望本文所述方法对大家的android开发有所帮助。