Я пытаюсь объединить некоторые существующие Qt-коды, написанные на C++, с кодом, написанным на Java, с использованием Qt Jambi, но я не совсем уверен, как это сделать. Я в основном пытаются добиваться тех двух вещей:Как смешивать объекты Qt Qt и объекты Qt Jambi
- Проходят QObject из C++ в Java с помощью JNI
- Проходят Qt Джамби QObject из Java в C++
Похоже, что я могу передать указатель напрямую, а затем оберните его в QNativePointer на стороне Java, но я не могу понять, как превратить QNativePointer обратно в исходный объект, завернутый Qt Jambi.
Например: я могу передать QWidget * как длинный Java, а затем создать QNativePointer в Java, но как я могу затем построить 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 = ...
Спасибо!
На самом деле, в старой версии Qt Jambi (я не помню, какой из них), theres fromNativePointer() или что-то подобное в QJambiObject, который «кажется» как то, что я хочу. В новейших версиях, похоже, это недокументировано. Был занят другими вещами и еще не успел проверить его, хотя ... – Dan
Из того, что я могу сказать, виджет Jambi обертывает собственный виджет, проксируя метод вызова собственного виджета с помощью внутреннего указателя. В Jambi все QObjects происходят из QJambiObject, которые также содержат QNAtivePointer. Возможно, я ошибаюсь, но похоже, что это так. Генератор Jambi полностью закрывает виджеты (есть некоторые вещи, которые необходимо выполнить вручную). – Dan
Ах, я забыл, что каждый объект QtJambi фактически должен иметь ссылку на соответствующий объект C++ Qt. Так что на самом деле методы, о которых вы говорили, могут работать. Но сомнительно, что эти методы задокументированы, если они уже не документированы сейчас, в ближайшем будущем, столкнувшись с фактом, что Trolltech отказался от проекта QtJambi и в настоящее время пытается преобразовать его в проект на базе сообщества. – Customizer