我正在尝试将一些用 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 = ...
谢谢!
最佳答案
我没想到这是可能的,你正在努力实现这一目标。如果我正确理解您的方法,那么您就是在尝试将 C++ QWidget 对象的内存中表示形式转换为 Java QWidget 对象。这只有在 Java 和 C++ 对象的内存表示相同时才有效,我对此表示严重怀疑。
即使是这种情况,它也可能不起作用,因为我很确定 QtJambi 版本的 QWidget 类不是 C++ QWidget 类的一对一克隆。
为此,您必须以某种方式读取 C++ QWidget 的值,创建 QtJambi QWidget 对象,然后将这些值设置为新的 QtJambi 小部件。我不知道可以完成这项工作的转换方法,我也不确定这是否可行。
关于java - 如何混合 C++ Qt 对象和 Qt Jambi 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1896432/