En esta página

Cómo funcionan las retrollamadas

Introducción

Existen varias situaciones en las que es necesario implementar una devolución de llamada al utilizar una API Java. Algunos ejemplos prácticos son las retrollamadas que escuchan los cambios de contenido a través de ContentObserver, y las retrollamadas que implementan interfaces Java como Handler.Callback.

QtJenny permite implementar dichas retrollamadas tanto en el caso de implementar una interfaz Java como de ampliar una clase Java, dependiendo de lo que utilice la API Java. Muchas de las API Java multiplataforma que también proporciona Android utilizan callbacks que son interfaces, pero Android también utiliza clases base abstractas en algunas situaciones, siendo un ejemplo destacado ContentObserver.

Implementación de interfaces Java

El siguiente diagrama ilustra la estructura y la división lógica entre las diferentes partes de la implementación de interfaces Java en C++.

Cómo funciona

La forma en que funciona es que usamos un java.reflect.Proxy, que envuelve una interfaz Java, y despacha las llamadas de los métodos de la interfaz al método genérico invoke() de un InvocationHandler.

La interfaz InvocationHandler es implementada por un NativeInvocationHandler específico del proyecto (proporcionado por tu aplicación), y esa implementación llama a un método de invocación genérico nativo que también es proporcionado por el proyecto. El método nativo llama a una función virtual genérica qt_invoke() en una clase C++ generada que imita la interfaz Java.

Finalmente, el código de usuario en el proyecto Qt C++ hereda esa clase generada, y sobrescribe las funciones virtuales en ella.

Extensión de clases Java

El siguiente diagrama ilustra la estructura y la división lógica entre las diferentes partes de la extensión de clases Java en C++.

Cómo funciona

La forma en que funciona es que generamos una subclase Java, que luego invoca un método genérico invoke() de una clase Java. 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.