Qt Remote Objects Quelle
Sie können einen QObject -Typ direkt als Quelle verwenden oder die gewünschte API in einer .rep
-Vorlage zur Verwendung mit dem Repc-Compiler definieren.
Wenn Sie bereits ein vollständig definiertes QObject haben, können Sie es als Quelle verwenden, indem Sie es an QRemoteObjectHostBase::enableRemoting() übergeben. Auf diese Weise können andere Prozesse oder Geräte dann dynamics replicas des Objekts erstellen, um damit zu interagieren.
Weitere Informationen finden Sie unter Interaktion mit entfernten Objekten.
Wenn Sie repc mit Hilfe der REPC_SOURCE-Variable eine Header-Quelldatei für Ihr Projekt generieren lassen, haben Sie drei verschiedene Möglichkeiten, die erforderliche API zu implementieren.
Angenommen, der Name Ihrer Klasse ist Foo, dann haben Sie die folgenden Optionen:
- FooSimpleSource Vererbung
- FooSource Vererbung
- FooSourceAPI-Verwendung mit Ihrer eigenen QObject
Weitere Einzelheiten zur Erstellung einer .rep
Datei finden Sie unter Das Rep-Dateiformat.
Im Header ist eine <Type>SimpleSource-Klasse definiert, die die grundlegenden Getter/Setter-Methoden für jede Eigenschaft bereitstellt und Datenelemente des richtigen Eigenschaftstyps im Header implementiert. "<Type>" steht hier für den Klassennamen aus der Datei .rep
. Wenn also Ihre Klasse in der Datei .rep
vom Typ "MyType" ist, dann wird in der generierten Header-Datei eine Klasse MyTypeSimpleSource deklariert. Dies ist ein schneller Weg, um mit der Verwendung der API zu beginnen. Um diese Klasse zu verwenden, müssen Sie eine Klasse schreiben, die von ihr erbt und alle definierten Slots implementiert, die in der generierten Header-Datei als rein virtuell gekennzeichnet sind. Sie müssen Ihrer Klasse auch die notwendige Logik hinzufügen, um die exponierten Eigenschaften zu verwalten und Signale auszusenden.
Wenn Sie Ihre Implementierungsdetails verbergen wollen, verwenden Sie die zweite in der Header-Datei deklarierte Klasse, die <Type>Source-Klasse. Diese Klassendefinition stellt keine Datenelemente zur Verfügung und macht auch die Getter/Setter-Funktionen rein virtuell. Sie müssen zwar möglicherweise mehr Code schreiben, aber die Verwendung dieser Klasse bietet Ihnen mehr Flexibilität bei Ihrer Implementierung.
Die dritte im Header erzeugte Klasse ist <Type>SourceAPI. Dies ist eine Vorlagenklasse, die speziell von der Vorlagenversion von QRemoteObjectHostBase::enableRemoting() verwendet wird, die es Ihnen ermöglicht, jede QObject zu verwenden, die die erforderliche API als Quelle unterstützt. Verwenden Sie diese Klasse, um Eigenschaften oder Signal/Slot-Parameter auszublenden oder zu konvertieren. Wenn Ihre Implementierung nicht die korrekte API bereitstellt, gibt es Warnungen zur Kompilierzeit.
Hinweis: Replikate und Quellen leiten sich beide von QObject ab; ihre QObject API wird jedoch nie offengelegt. Zum Beispiel, während ein Replikat ein destroyed Signal hat, wird das destroyed Signal der Quelle nicht weitergegeben. Die Quelle und jedes ihrer Replikate sind einzigartige QObjects mit eigenen Verbindungen und Lebensdauern. Stattdessen wird die API, die offengelegt wird, durch die .rep
Vorlage definiert, die von repc verwendet wird. Im Fall von rohen QObjects werden alle API-Elemente in der Vererbungskette von einem bestimmten Vorfahren definiert. Es wird immer die übergeordnete Klasse QObject verwendet, es sei denn, Sie definieren Q_CLASSINFO("RemoteObject Type")
in einem Vorgänger. Wenn Sie Q_CLASSINFO("RemoteObject Type")
verwenden, ist die API dieser Klasse die niedrigste Ebene der verwendeten API.
Identifizierung von Quellen
Da ein Host-Knoten mehr als eine Quelle haben kann, benötigt jede Quelle einen Namen. Alle von repc generierten Header enthalten eine Möglichkeit für den Knoten, den Klassennamen zu bestimmen: Q_CLASSINFO für Replica-, Simplesource- oder Source-Typen oder eine statische name()
Funktion für den SourceAPI-Typ. Wenn Sie Ihren eigenen QObject Typ an QRemoteObjectHostBase::enableRemoting() übergeben, wird der Name anhand der folgenden Logik ermittelt:
- Optional kann ein Name an QRemoteObjectHostBase::enableRemoting() übergeben werden. Wenn er übergeben wird, wird dieser Name verwendet.
- Wenn das Objekt oder einer seiner Vorfahren Q_CLASSINFO vom Typ "RemoteObject Type" definiert hat, wird dieser Typname verwendet.
- Wenn der Objektname von QObject festgelegt ist, wird er verwendet.
- Wenn keines der oben genannten Elemente verfügbar ist, schlägt der Aufruf von QRemoteObjectHostBase::enableRemoting() fehl und gibt false zurück.
© 2025 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.