Qt-Schnittstellen oder abstrakte Klassen und qobject_cast ()
Ich habe ein ziemlich komplexer Satz von C++ - Klassen, die neu geschrieben von Java. So hat jede Klasse einen einzigen geerbten Klasse, und dann auch implementiert eine oder mehrere abstrakte Klassen (oder interfaces).
Ist es möglich qobject_cast()
konvertieren von einer Klasse, die einer der Schnittstellen? Wenn ich leite alle Schnittstellen von QObject
bekomme ich eine Fehlermeldung wegen der mehrdeutigen QObject
Referenzen. Wenn ich jedoch nur die Basisklasse geerbt von QObject
kann ich nicht benutzen qobject_cast()
denn das arbeitet mit QObject
s.
Ich würde gerne in der Lage sein zu werfen, um Klassen zwischen Plug-ins und DLLs bezeichnet, die durch Ihre Schnittstellen.
InformationsquelleAutor der Frage Timothy Baldridge | 2010-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach einigen Recherchen und Lesen die qobject_cast Dokumentationfand ich dies:
Hier ist der link zu dem Beispiel: Plug & Farbe.
Nach dem Graben bis die Schnittstellen-header in dem Beispiel fand ich die Q_DECLARE_INTERFACE makro das sollten Sie tun, was Sie wollen.
Erste, nicht Erben
QObject
aus Ihrer Schnittstellen. Für jede Schnittstelle, die Sie haben, verwenden Sie die Q_DECLARE_INTERFACE Erklärung wie diese:Dann in der Klassendefinition, verwenden Sie die Q_INTERFACES makro, so wie hier:
Nach all dieser ärger, der folgende code funktioniert:
InformationsquelleAutor der Antwort Venemo