java - 如何混合 C++ Qt 对象和 Qt Jambi 对象

标签 java c++ qt4 qt-jambi

我正在尝试将一些用 C++ 编写的现有 Qt 代码与一些使用 Qt Jambi 用 Ja​​va 编写的代码结合起来,但我不太确定该怎么做。我基本上是想实现两件事:

  1. 使用 JNI 将 QObject 从 C++ 传递到 Java
  2. 将 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/

相关文章:

java - 使用 Quantum 和 Produce Table 进行循环调度

java - 未知异常? java.nio.file.FileSystemException : Invalid exchange

python - 来自 wxPython 的 NSView*

python - PyQT按钮点击不起作用

java - Android CalendarView 不显示日期

java - statement.getGeneratedKeys() 和 MySQL

C++ 使用结构作为某种类型

c++ - 将 LTR 转换为 RTL?

c++ - QTabWidget设置只有一个tab的标题字体

python - 是否可以更改 QTableWidget 行标签的颜色?