QtJniTypes Namespace
L'espace de noms QtJniTypes déclare des types C++ correspondant à des types Java. En savoir plus...
| En-tête : | #include <QtJniTypes> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Depuis : | Qt 6.8 |
Classes
(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) |
Description détaillée
Le framework Java Native Interface (JNI) permet au code natif C ou C++ d’appeler des API Java, ainsi que d’enregistrer des fonctions natives C ou C++ que le code Java doit pouvoir appeler via la JVM. Dans Qt, les types QJniObject et QJniEnvironment fournissent des wrappers pratiques pour l’utilisation de JNI.
Comme le langage Java, à l’instar du C++, prend en charge la surcharge, les fonctions doivent être spécifiées avec leur chaîne de signature complète. Ce processus est complexe, répétitif et source d’erreurs, en particulier lorsque les fonctions prennent plusieurs paramètres. QJniObject fournit des API de modèles variadiques capables de déduire la chaîne de signature d’un appel de fonction au moment de la compilation, en fonction des types C++ passés au modèle. Pour que cela fonctionne, le mappage de ces types C++ vers leur chaîne JNI correspondante doit être connu au moment de la compilation.
Qt implémente ce mappage pour la bibliothèque standard JNI types. En utilisant la macro Q_DECLARE_JNI_CLASS, le mappage peut être étendu à des types Java arbitraires.
Voir également Q_DECLARE_JNI_CLASS, Q_DECLARE_JNI_NATIVE_METHOD et Q_JNI_NATIVE_METHOD.
Classes
classe JObject
Le modèle JObject de l’espace de noms QtJniTypes sert de base aux types Java déclarés. En savoir plus…
Documentation sur les macros
[since 6.8] Q_DECLARE_JNI_CLASS(Type, JavaSignature)
Déclare un type C++ Type dans l'espace de noms QtJniTypes qui encapsule la classe Java JavaSignature. Le nom de la classe Java dans JavaSignature doit être entièrement qualifié, en utilisant / comme séparateur.
Q_DECLARE_JNI_CLASS(File, "java/io/File")
Q_DECLARE_JNI_CLASS(FileWriter, "java/io/FileWriter")Les classes C++ QtJniTypes::File et QtJniTypes::FileWriter sont alors des types de type QJniObject(des spécialisations de QtJniTypes::JObject, pour être précis) qui peuvent être utilisées pour instancier la classe Java correspondante, pour appeler des méthodes et pour transmettre ces instances via des méthodes de modèle variadiques QJniObject avec déduction automatique de la signature à la compilation.
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);
}En plus de l’API QJniObject, ces classes C++ disposent également d’une fonction membre statique registerNativeMethods qui peut être utilisée comme suit :
QtJniTypes::File::registerNativeMethods({
Q_JNI_NATIVE_METHOD(freeFunction)
});Cette macro a été introduite dans Qt 6.8.
Voir également Q_DECLARE_JNI_NATIVE_METHOD, Q_JNI_NATIVE_METHOD et QtJniTypes::JObject.
[since 6.8] Q_DECLARE_JNI_NATIVE_METHOD(Method)
Déclare la fonction libre C ou C++ ` Method ` comme méthode native. Cette méthode peut ensuite être enregistrée auprès du framework JNI à l'aide de la méthode `QJniEnvironment::registerNativeMethod()` et 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);
}Cette macro a été introduite dans Qt 6.8.
Voir également Q_JNI_NATIVE_METHOD et Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE.
[since 6.8] Q_DECLARE_JNI_NATIVE_METHOD(Method, JavaName)
Déclare la fonction libre C ou C++ ` Method ` en tant que méthode native accessible en Java sous le nom ` JavaName`. La méthode peut ensuite être enregistrée auprès du framework JNI à l'aide de `QJniEnvironment::registerNativeMethod()`, grâce à la macro ` Q_JNI_NATIVE_METHOD `.
Il s'agit d'une fonction surchargée.
Cette macro a été introduite dans Qt 6.8.
Voir également Q_JNI_NATIVE_METHOD et Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE.
[since 6.8] Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method)
Déclare la fonction membre statique de classe C++ ` Method ` comme méthode native. Cette méthode peut ensuite être enregistrée auprès du framework JNI à l'aide de `QJniEnvironment::registerNativeMethod()`, grâce à 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)
});Cette macro a été introduite dans Qt 6.8.
Voir également Q_DECLARE_JNI_NATIVE_METHOD et Q_JNI_NATIVE_SCOPED_METHOD.
[since 6.8] Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(Method, JavaName)
Déclare la fonction membre statique de classe C++ ` Method ` comme une méthode native accessible en Java sous le nom ` JavaName`. Cette méthode peut ensuite être enregistrée auprès du framework JNI à l'aide de la méthode `QJniEnvironment::registerNativeMethod()` et de la macro ` Q_JNI_NATIVE_METHOD `.
Il s'agit d'une fonction surchargée.
Cette macro a été introduite dans Qt 6.8.
Voir également Q_DECLARE_JNI_NATIVE_METHOD et Q_JNI_NATIVE_SCOPED_METHOD.
[since 6.8] Q_JNI_NATIVE_METHOD(Method)
Permet d'enregistrer la méthode native Method (précédemment declared ) auprès du framework JNI. Utilisez cette macro lorsque vous enregistrez la méthode auprès de JNI à l'aide de QJniEnvironment::registerNativeMethod().
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{
QJniEnvironment env;
env.registerNativeMethods<QtJniTypes::MyJavaType>({
Q_JNI_NATIVE_METHOD(nativeFunction)
});
}Cette macro a été introduite dans Qt 6.8.
Voir également Q_DECLARE_JNI_NATIVE_METHOD.
[since 6.8] Q_JNI_NATIVE_SCOPED_METHOD(Method, Scope)
Permet d'enregistrer la méthode native Method, précédemment accessible via declared, dans l'espace de noms Scope auprès du framework JNI. Utilisez cette macro lorsque vous enregistrez la méthode auprès de JNI à l'aide de QJniEnvironment::registerNativeMethod().
Cette macro a été introduite dans Qt 6.8.
Voir également Q_JNI_NATIVE_METHOD et 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.