Qt for Android开发实例教程
作者:shichen2014 发布时间:2023-06-27 10:00:39
标签:Qt,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开发有所帮助。


猜你喜欢
- kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系统的反爬虫组件。系统要求基于 spring-boot 开
- 前言注解是Java很强大的部分,但大多数时候我们倾向于使用而不是去创建注解。例如,在Java源代码里不难找到Java编译器处理的@Overr
- 一、简介用法ScrollView大致相同二、方法1)HorizontalScrollView水平滚动控件使用方法1、在layout布局文件的
- 这篇文章主要介绍了Java String的intern用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- clone() 方法麻烦一些,需要将所有涉及到的类实现声明式接口 Cloneable,并覆盖Object类中的clone()方法,并设置作用
- 初始化方式一:@PostConstruct注解假设类UserController有个成员变量UserService被@Autowired修饰
- RFC6749OAuth2的官方文档在RFC6749:https://datatracker.ietf.org/doc/html/rfc67
- ObjectMapper 忽略字段大小写核心代码:ObjectMapper mapper = new ObjectMapper();mapp
- 本文实例讲述了C#保存listbox中数据到文本文件的方法。分享给大家供大家参考。具体实现方法如下:private void SaveLst
- CoordinatorLayout 实现了多种Material Design中提到的滚动效果。目前这个框架提供了几种不用写动画代码就能工作的
- 本文实例为大家分享了Java实现简单抽牌游戏的具体代码,供大家参考,具体内容如下Main类package com.company;impor
- 一般来说一个 HTML 文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想
- 在我们对gc中的算法有基本概念理解后,要把算法的理念实现还需要依托实际垃圾收集器的使用。因为光靠一些简单的原理不足以支撑整个程序的运行,在回
- 一、WebSocket简介WebSocket协议通过在客户端和服务端之间提供全双工通信来进行Web和服务器的交互功能。在WebSocket应
- 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便、快捷。但是当时并没有认真的去学习下,毕竟感觉
- 1. Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,
- java -jar设置添加启动参数方法java -jar 参数前后位置说明springboot项目启动的时候可以直接使用java -jar
- 在Activity 添加即可getWindow().addFlags(WindowManager.LayoutParams.FLAG_SEC
- C# 7 里面的Pattern Mathing 更多内容请查看官方文档:https://docs.microsoft.com/zh-cn/d
- 前言先说结论,tauri是一个非常优秀的前端桌面开发框架,但是,rust门槛太高了。一开始我是用electron来开发的,但是打包后发现软件