Auf dieser Seite

Wie Rückrufe funktionieren

Einführung

Es gibt verschiedene Situationen, in denen Sie bei der Verwendung einer Java-API einen Callback implementieren müssen. Praktische Beispiele dafür sind Callbacks, die auf Inhaltsänderungen über eine ContentObserver hören, und Callbacks, die Java-Schnittstellen wie Handler.Callback implementieren.

QtJenny erlaubt die Implementierung solcher Callbacks sowohl bei der Implementierung einer Java-Schnittstelle als auch bei der Erweiterung einer Java-Klasse, abhängig davon, was die Java-API verwendet. Viele der plattformübergreifenden Java-APIs, die auch von Android bereitgestellt werden, verwenden Callbacks, die Schnittstellen sind, aber Android verwendet in einigen Situationen auch abstrakte Basisklassen, ein prominentes Beispiel ist ContentObserver.

Implementierung von Java-Schnittstellen

Das folgende Diagramm veranschaulicht die Struktur und logische Aufteilung zwischen den verschiedenen Teilen der Implementierung von Java-Schnittstellen in C++.

Wie es funktioniert

Die Funktionsweise besteht darin, dass wir eine java.reflect.Proxy verwenden, die eine Java-Schnittstelle umhüllt und Aufrufe der Schnittstellenmethoden an die generische Methode invoke() einer InvocationHandler weiterleitet.

Die Schnittstelle InvocationHandler wird von einer projektspezifischen NativeInvocationHandler implementiert (die von Ihrer Anwendung bereitgestellt wird), und diese Implementierung ruft eine native generische Aufrufmethode auf, die ebenfalls vom Projekt bereitgestellt wird. Die native Methode ruft eine generische qt_invoke() virtuelle Funktion in einer generierten C++-Klasse auf, die die Java-Schnittstelle nachahmt.

Schließlich erbt der Anwendercode im Qt C++ Projekt diese generierte Klasse und überschreibt die virtuellen Funktionen in ihr.

Erweitern von Java-Klassen

Das folgende Diagramm veranschaulicht die Struktur und logische Aufteilung zwischen den verschiedenen Teilen der Erweiterung von Java-Klassen in C++.

Wie es funktioniert

Die Funktionsweise besteht darin, dass wir eine Java-Unterklasse generieren, die dann eine generische invoke() -Methode einer anderen Klasse aufruft. 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.