首页 > 编程语言 >Qt on Android 开发之 C++与Java 交互

Qt on Android 开发之 C++与Java 交互

时间:2022-10-31 18:32:02浏览次数:50  
标签:QAndroidJniObject Java Qt int void C++ ui str MainWindow


目录

  • ​​简述​​
  • ​​Qt引入Android模块​​
  • ​​Java示例​​
  • ​​Cpp与java交互​​

简述

我做了一个小例子,来实现了 C++与Java之间的交互。
该示例是以整形和字符型举例说明,用QAndroidJniObject类的callStaticMethod方法进行与Java交互

Qt引入Android模块

首先要在Pro中加入Android开发模块

QT       += androidextras

Java示例

可以先看一下我写的java简单案例(为了方便演示都做成静态了):

package com.demo.cppandjava;

public class democppandjava
{
private static int tmpNum = 1;
private static String tmpStr = "123";

public static void setInt(int num) {
tmpNum = num;
}
public static int getInt() {
return tmpNum;
}
public static void setString(String str) {
tmpStr = str;
}
public static String getString() {
return tmpStr;
}
}

Cpp与java交互

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_pbSet_clicked();
void on_pbGetInt_clicked();
void on_pbGetStr_clicked();

private:
Ui::MainWindow *ui;

private:
//Cpp与java交互
void cppAssignmentJavaInt(int num);
int cppUseJavaToInt();
void cppAssignmentJavaString(QString str);
QString cppUseJavaToString();
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAndroidJniObject>
#include <QAndroidJniEnvironment>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::cppAssignmentJavaInt(int num)
{
#ifdef Q_OS_ANDROID
QAndroidJniObject::callStaticMethod<void>(
"com/demo/cppandjava/democppandjava",
"setInt",
"(I)V",
num);
#endif
}

int MainWindow::cppUseJavaToInt()
{
#ifdef Q_OS_ANDROID
return QAndroidJniObject::callStaticMethod<jint>("com/demo/cppandjava/democppandjava", "getInt");
#endif
}

void MainWindow::cppAssignmentJavaString(QString str)
{
#ifdef Q_OS_ANDROID
QAndroidJniObject strTMP = QAndroidJniObject::fromString(str);
QAndroidJniObject::callStaticMethod<void>(
"com/demo/cppandjava/democppandjava",
"setString",
"(Ljava/lang/String;)V",
strTMP.object<jstring>());
#endif
}

QString MainWindow::cppUseJavaToString()
{
#ifdef Q_OS_ANDROID
QAndroidJniObject str = QAndroidJniObject::callStaticObjectMethod("com/demo/cppandjava/democppandjava",
"getString",
"()Ljava/lang/String;");
return str.toString();
#endif
}

void MainWindow::on_pbSet_clicked()
{
int num = ui->spinBox->text().toInt();
QString str = ui->lineEdit->text();
cppAssignmentJavaInt(num);
cppAssignmentJavaString(str);
}

void MainWindow::on_pbGetInt_clicked()
{
ui->lText->setText(QString::number(cppUseJavaToInt()));
}

void MainWindow::on_pbGetStr_clicked()
{
ui->lText->setText(cppUseJavaToString());
}

整型是简单的,字符型稍稍要绕一下。要注意"()Ljava/lang/String;"这里有个分号哦!~



标签:QAndroidJniObject,Java,Qt,int,void,C++,ui,str,MainWindow
From: https://blog.51cto.com/u_15854865/5810884

相关文章

  • java中将word转换为html导入到kindeditor编辑器中(解决图片问题,样式,非常完美)
    ​ 项目需求可发布文章需求涉及到富文本编辑器经过查阅我选择了较为简便不需要后端支持可独立完成的tinymce框架官方文档也是相当完整虽然都是全英文但是有强大的......
  • QT之自制Slider
    需求: 1.绘制一个滑动条,在其上方绘制三角形, 2.当鼠标进入(移动)到三角形区域时显示对应的标注值 3.鼠标双击时三角形时,滑块移动到该位置 4.鼠标单击滑块槽时,......
  • 完美解决 java: 无效的目标发行版: 11
    1、问题描述经过研究才发现,这是因为作者使用了jdk8进行编译,而试图使用jdk11的功能,这就必然会导致版本问题,因为jdk8支持1-8这个区间的功能,如何解决这个问题呢? image-2......
  • javascript日期处理函数的一些问题
    问题1:newDate(字符串)产生的日期对象,在某些情形下,可能会自动增加1天。猜测是和时区有关,浏览器没有默认当前时区?这是一个坑。问题2:setDate()设置日期后不准确的问题。比如......
  • C++ 不知树系列之认识二叉树(顺序、链表存储的实现)
    1.概念什么是二叉树?顾名思义,二叉树指树中的任何一个结点(除叶结点)的子结点不能多于2个。二叉树可分为:一般二叉树。只要符合二叉树的定义便可。满二叉树。满的意......
  • Qt设置运行时动态库路径的几点说明
    Qt设置运行时动态库路径的几点说明Qt教程 2022-04-1601:00随着需求的不断增加,程序不断变大,用到的动态库也越来越多,到了发布程序的时候你会发现和可执行文件同一目录下......
  • 肖sir__杭州java面试题____归纳(1)
    1.有用过Java做什么2.用了Java什么框架3.Java spring知道吗?4.Java里面的bean知道是什么吗5.Java的IOC知道吗6.Java的springboot中用什么注解可以变成一个服务7.springboot......
  • Java动态加载字节码
    Java字节码简单说,Java字节码就是.class后缀的文件,里面存放Java虚拟机执行的指令。由于Java是一门跨平台的编译型语言,所以可以适用于不同平台,不同CPU的计算机,开发者只需......
  • 一篇了解Java反射
    反射首先从运行原理了解为什么要用反射,当我们执行一段代码时,代码经过javac编译得到.class的字节码文件,再经过类加载器的loadClass()方法创建Class类对象到堆中;当我们实......
  • 力扣409(java&python)-最长回文串(简单)
    题目:给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的最长的回文串 。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串......