Fonctionnement des callbacks
Introduction
Il existe diverses situations dans lesquelles vous devez implémenter un callback lorsque vous utilisez une API Java. Parmi les exemples concrets, on peut citer les callbacks qui surveillent les modifications de contenu via un ` ContentObserver`, et les callbacks qui implémentent des interfaces Java telles que ` Handler.Callback`.
QtJenny permet d’implémenter de tels callbacks aussi bien en implémentant une interface Java qu’en étendant une classe Java, selon ce qu’utilise l’API Java. La plupart des API Java multiplateformes également fournies par Android utilisent des callbacks sous forme d’interfaces, mais Android utilise aussi des classes de base abstraites dans certaines situations, un exemple notable étant ContentObserver.
Implémentation d’interfaces Java
Le diagramme suivant illustre la structure et la répartition logique entre les différentes parties de l’implémentation d’interfaces Java en C++.
Le principe est le suivant : on utilise une classe ` java.reflect.Proxy`, qui encapsule une interface Java, et qui achemine les appels des méthodes de l’interface vers la méthode générique ` invoke() ` d’une classe ` InvocationHandler`.
L’interface ` InvocationHandler ` est implémentée par une classe ` NativeInvocationHandler ` spécifique au projet (fournie par votre application), et cette implémentation appelle une méthode d’invocation générique native également fournie par le projet. La méthode native appelle une fonction virtuelle générique ` qt_invoke() ` dans une classe C++ générée qui reproduit l’interface Java.
Enfin, le code utilisateur du projet Qt C++ hérite de cette classe générée et redéfinit les fonctions virtuelles qu’elle contient.
Extension des classes Java
Le diagramme suivant illustre la structure et la répartition logique entre les différentes parties de l’extension de classes Java en C++.
Le principe est le suivant : nous générons une sous-classe Java, qui appelle ensuite une méthode générique invoke() d’une classe ` NativeInvocationHandler`, qui est une classe Java fournie par le projet.
La méthode ` NativeInvocationHandler ` appelle une méthode d’invocation générique native, également fournie par le projet. La méthode native appelle une fonction virtuelle générique ` qt_invoke() ` dans une classe C++ générée qui imite la classe Java.
Enfin, le code utilisateur du projet Qt C++ hérite de cette classe générée et redéfinit les fonctions virtuelles qu’elle contient.
© 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.