QtJniTypes Namespace
El espacio de nombres QtJniTypes declara tipos C++ que corresponden a tipos Java. Más...
| Cabecera: | #include <QtJniTypes> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Desde: | Qt 6.8 |
Clases
(since Qt 6.8) class | JObject |
Macros
(since 6.8) | Q_DECLARE_JNI_CLASS(Type, JavaSignature) |
(since 6.8) | Q_DECLARE_JNI_NATIVE_METHOD(Method) |
(since 6.8) | Q_DECLARE_JNI_NATIVE_METHOD(Method, JavaName) |
(since 6.8) | Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method) |
(since 6.8) | Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method, JavaName) |
(since 6.8) | Q_JNI_NATIVE_METHOD(Method) |
(since 6.8) | Q_JNI_NATIVE_SCOPED_METHOD(Method, Scope) |
Descripción detallada
El framework Java Native Interface permite al código nativo C o C++ llamar a APIs Java, y registrar funciones nativas C o C++ que el código Java debería poder llamar con la JVM. En Qt, los tipos QJniObject y QJniEnvironment proporcionan cómodas envolturas para utilizar JNI.
Dado que el lenguaje Java, de forma similar a C++, soporta sobrecarga, las funciones necesitan ser especificadas incluyendo toda su cadena de firma. Esto es complejo, repetitivo y propenso a errores, especialmente cuando las funciones toman varios parámetros. QJniObject proporciona APIs de plantillas variadas que pueden deducir la cadena de firma para una llamada a función en tiempo de compilación, basándose en los tipos C++ pasados a la plantilla. Para que esto funcione, el mapeo de esos tipos C++ a su correspondiente cadena JNI debe conocerse en tiempo de compilación.
Qt implementa este mapeo para el estándar JNI types. Usando la macro Q_DECLARE_JNI_CLASS, el mapeo puede extenderse para tipos Java arbitrarios.
Véase también Q_DECLARE_JNI_CLASS, Q_DECLARE_JNI_NATIVE_METHOD, y Q_JNI_NATIVE_METHOD.
Clases
Clase JObject
La plantilla JObject del espacio de nombres QtJniTypes es la base de los tipos Java declarados. Más...
Documentación de macros
[since 6.8] Q_DECLARE_JNI_CLASS(Type, JavaSignature)
Declara un tipo C++ Type en el espacio de nombres QtJniTypes que envuelve la clase Java JavaSignature. El nombre de la clase Java en JavaSignature debe estar completamente cualificado, utilizando / como separador.
Q_DECLARE_JNI_CLASS(File, "java/io/File") Q_DECLARE_JNI_CLASS(FileWriter, "java/io/FileWriter")
Las clases C++ QtJniTypes::File y QtJniTypes::FileWriter son entonces tipos similares a QJniObject(especializaciones de QtJniTypes::JObject, para ser precisos) que se pueden utilizar para instanciar la clase Java correspondiente, para llamar a métodos y para pasar dichas instancias a través de métodos de plantillas variádicas QJniObject con deducción automática de firmas en tiempo de compilación.
using namespace QtJniTypes; File file("path/to/file"); // instantiates the java.io.File type in Java if (file.callMethod<bool>("createNewFile")) { FileWriter writer(file); // instantiates a java.io.FileWriter that operates on file writer.callMethod("write", 42); }
Además de la API QJniObject, esas clases C++ también tienen una función miembro estática registerNativeMethods que puede usarse así:
QtJniTypes::File::registerNativeMethods({ Q_JNI_NATIVE_METHOD(freeFunction) });
Esta macro se introdujo en Qt 6.8.
Véase también Q_DECLARE_JNI_NATIVE_METHOD, Q_JNI_NATIVE_METHOD, y QtJniTypes::JObject.
[since 6.8] Q_DECLARE_JNI_NATIVE_METHOD(Method)
Declara la función C o C++ libre Method como método nativo. El método puede registrarse posteriormente con el marco JNI utilizando QJniEnvironment::registerNativeMethod() con la ayuda de la macro Q_JNI_NATIVE_METHOD.
// C++ side Q_DECLARE_JNI_CLASS(MyJavaType, "my/java/Type") static void nativeFunction(JNIEnv *env, jobject thiz, jlong id) { // ... } Q_DECLARE_JNI_NATIVE_METHOD(nativeFunction) Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { QJniEnvironment env; env.registerNativeMethods<QtJniTypes::MyJavaType>({ Q_JNI_NATIVE_METHOD(nativeFunction) }); } // Java side public class MyJavaType { native public nativeFunction(long id); }
Esta macro se introdujo en Qt 6.8.
Véase también Q_JNI_NATIVE_METHOD y Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE.
[since 6.8] Q_DECLARE_JNI_NATIVE_METHOD(Method, JavaName)
Declara la función C o C++ libre Method como un método nativo que está disponible en Java como JavaName. El método puede registrarse posteriormente en el marco JNI mediante QJniEnvironment::registerNativeMethod() con la ayuda de la macro Q_JNI_NATIVE_METHOD.
Se trata de una función sobrecargada.
Esta macro se introdujo en Qt 6.8.
Véase también Q_JNI_NATIVE_METHOD y Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE.
[since 6.8] Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method)
Declara la función estática de clase C++ Method como método nativo. El método puede registrarse posteriormente con el marco JNI utilizando QJniEnvironment::registerNativeMethod() con la ayuda de la macro Q_JNI_NATIVE_SCOPED_METHOD.
class NativeHandler { // ... private: static void handleChange(JNIEnv*, jobject, jlong id); Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(handleChange) }; \dots QJniEnvironment env; env.registerNativeMethods<QtJniTypes::MyJavaType>({ Q_JNI_NATIVE_SCOPED_METHOD(handleChange, NativeHandler) });
Esta macro se introdujo en Qt 6.8.
Véase también Q_DECLARE_JNI_NATIVE_METHOD y Q_JNI_NATIVE_SCOPED_METHOD.
[since 6.8] Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method, JavaName)
Declara la función miembro de la clase estática C++ Method como un método nativo que está disponible en Java como JavaName. El método puede registrarse posteriormente con el marco JNI utilizando QJniEnvironment::registerNativeMethod() con la ayuda de la macro Q_JNI_NATIVE_METHOD.
Se trata de una función sobrecargada.
Esta macro se introdujo en Qt 6.8.
Véase también Q_DECLARE_JNI_NATIVE_METHOD y Q_JNI_NATIVE_SCOPED_METHOD.
[since 6.8] Q_JNI_NATIVE_METHOD(Method)
Hace que el método nativo Method previamente declared esté disponible para su registro con el framework JNI. Use esta macro cuando registre el método con JNI usando QJniEnvironment::registerNativeMethod().
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { QJniEnvironment env; env.registerNativeMethods<QtJniTypes::MyJavaType>({ Q_JNI_NATIVE_METHOD(nativeFunction) }); }
Esta macro se introdujo en Qt 6.8.
Véase también Q_DECLARE_JNI_NATIVE_METHOD.
[since 6.8] Q_JNI_NATIVE_SCOPED_METHOD(Method, Scope)
Hace que el método nativo declared previamente Method en el ámbito Scope esté disponible para su registro con el entorno JNI. Use esta macro cuando registre el método con JNI usando QJniEnvironment::registerNativeMethod().
Esta macro se introdujo en Qt 6.8.
Véase también Q_JNI_NATIVE_METHOD y Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.