永发信息网

qml语言可以与java交互吗

答案:1  悬赏:0  手机版
解决时间 2021-03-16 17:00
qml语言可以与java交互吗
最佳答案
选择了使用QML调用C++注册的单例函数这样的方法来实现调用C++代码,然后再通过QtAndroidJniObject::callMethod()来调用Java的本地方法。为了实现这样一个功能,除了在上篇文章介绍的注册QML单例之外,还必须在该函数中调用Android方法。下面是SDActivityDelegateSingleton类的实现:
SDActivityDelegateSingleton.h

#ifndef ADSINGLETON_H
#define ADSINGLETON_H

#include

// Android:绑定SuperDoctorActivity,负责广告API的调用
class SDActivityDelegateSingleton: public QObject
{
Q_OBJECT
public:
SDActivityDelegateSingleton( QObject* pParent = Q_NULLPTR ):
QObject( pParent )
{
}

Q_INVOKABLE void call( const QString& methodName );
};

#endif // ADSINGLETON_H

SDActivityDelegateSingleton.cpp

#include "SDActivityDelegateSingleton.h"
#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_NO_SDK)
#include

void SDActivityDelegateSingleton::call( const QString& methodName )
{
const QAndroidJniObject& activity = QtAndroid::androidActivity( );
qDebug( "method name is: %s", qPrintable( methodName ) );
activity.callMethod( qPrintable( methodName ) );
}
#else
void SDActivityDelegateSingleton::call( const QString& methodName )
{
qDebug( "the desktop does not implement calling method: %s",
qPrintable( methodName ) );
}
#endif

然后在是SuperDoctorActivity.java:

// SuperDoctorActivity.java 这个Java文件重写了Android的Activity

package com.jcystudio.superdoctor;

import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.FrameLayout;
import android.view.Gravity;
import org.qtproject.qt5.android.bindings.QtActivity;
……

public class SuperDoctorActivity extends QtActivity
{
@Override
public void onCreate( Bundle savedInstanceState )
{
super.onCreate(savedInstanceState);
……
SmartBannerManager.init(this);
}

……

public void showSmartAD( )
{
SmartBannerManager.show( this );
}
}

这样,通过QML就可以调用Java代码了,调用方法是:

……
function prepare( )
{
SDActivity.call( "showSmartAD" );// ←调用Java方法
this.focus = true;// 获得按键焦点,可以使用按键控制
Controller.clearBlocks( );
Controller.setupGame( mode, difficulty, map, actions, colors );
headerSprite.currentFrame = 2;// 小人指向平常的位置
readyMask.visible = true;
backgroundMusic.play( );
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
哪个播放器没广告?
S301/G102(路口)地址在什么地方,想过去办事
马未都:一夫一妻制没有生命力?
小号美化咋登录穿越火线
惠丰一队地址有知道的么?有点事想过去
中国移动点点银牌会员是什么
河北省廊坊市燕郊二中教师楼是什么性质 有房
一手除拇指外,其它二指(含食指)近侧指间关
精神上的贫穷可怕还是物质上的贫穷偶可怕????
空调运行中拔掉了电源,晚上回来空调无法启动
华宇绿洲西门地址在哪,我要去那里办事
公司离职申请有一条说离职后跟公司没有任何劳
谁有ansys16.0的64位版本的连接,确保能下载
赛尔号技能恢复道具怎样获得
还珠格格里乾隆怎么叫孝庄母亲?害我想了半天
推荐资讯
写黄山 导游词300~400字
南开大学经济学院保研概率
想知道德国双立人锅具和安利皇后锅具相比,哪
君逸养生堂地址在什么地方,想过去办事
我有个87年的美国硬币1美元的现值多少钱?
急!需要300个英语单词,简单点的,我八年级
人生本就是苦还是只有童年苦 生命就是如此
男女是丁卯年生人选在丁卯日结婚好吗?
魅蓝note3进入recovery清除数据 会不会清除照
大东海旅游投资有限公司后勤中心地址有知道的
电脑放着视频,突然就自动关机了,然后就再也
下关师范附中和下关一中给是一所学校
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?