Sur cette page

Fonctionnement des rappels

Introduction

Il existe plusieurs situations dans lesquelles vous devez mettre en œuvre un rappel lors de l'utilisation d'une API Java. Des exemples pratiques sont les rappels qui écoutent les changements de contenu via ContentObserver, et les rappels qui implémentent des interfaces Java telles que Handler.Callback.

QtJenny permet d'implémenter de tels rappels à la fois dans le cas de l'implémentation d'une interface Java et de l'extension d'une classe Java, en fonction de ce que l'API Java utilise. De nombreuses API Java multiplateformes, également fournies par Android, utilisent des rappels qui sont des interfaces, mais Android utilise également des classes de base abstraites dans certaines situations, un exemple important étant ContentObserver.

Mise en œuvre des interfaces Java

Le diagramme suivant illustre la structure et la division logique entre les différentes parties de la mise en œuvre des interfaces Java en C++.

Comment cela fonctionne-t-il ?

Le fonctionnement est le suivant : nous utilisons un java.reflect.Proxy, qui enveloppe une interface Java et transmet les appels des méthodes de l'interface à la méthode générique invoke() d'un InvocationHandler.

L'interface InvocationHandler est mise en œuvre par une NativeInvocationHandler spécifique au projet (fournie par votre application), et cette mise en œuvre appelle une méthode d'invocation générique native qui est é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 l'interface Java.

Enfin, le code utilisateur du projet Qt C++ hérite de cette classe générée et remplace les fonctions virtuelles qu'elle contient.

Extension des classes Java

Le diagramme suivant illustre la structure et la division logique entre les différentes parties de l'extension des classes Java en C++.

Comment cela fonctionne-t-il ?

Nous générons une sous-classe Java, qui invoque ensuite une méthode générique invoke() d'une classe C++. NativeInvocationHandler], which is a project-supplied Java class. The \c {NativeInvocationHandler} calls a native generic invocation method that is also project-supplied. The native method calls a generic \c {qt_invoke()} virtual function in a generated C++ class that mimics the Java class. Finally, the user code in the Qt C++ project inherits that generated class, and overrides the virtual functions in it.

© 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.