我正在尝试将一些用 C++ 编写的现有 Qt 代码与一些使用 Qt Jambi 用 Java 编写的代码结合起来,但我不太确定如何去做。我基本上试图实现两件事:
- 使用 JNI 将 QObject 从 C++ 传递到 Java
- 将 Qt Jambi QObject 从 Java 传递到 C++
看起来我可以直接传递指针,然后将其包装在 Java 端的 QNativePointer 中,但我不知道如何将 QNativePointer 转换回由 Qt Jambi 包装的原始对象。
例如:我可以将 QWidget* 作为 long 传递给 Java,然后在 Java 中创建一个 QNativePointer,但是我怎样才能从中构造一个 QWidget?QJambiObject 和 QObject 似乎没有“setNativePointer”方法,我不知道如何转换它。
在 C++ 中:
QWidget* widget = ...
jclass cls = env->FindClass("Test");
jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V");
env->CallStaticVoidMethod(cls, mid, int(widget));
在 Java 中:
public class Test {
public static void test (int ptr) {
QNativePointer pointer = new QNativePointer(QNativePointer.Type.Int);
pointer.setIntValue(ptr);
QWidget widget = ...
谢谢!