Auf dieser Seite

Qt Remote Objects Quelle

Allgemein gesagt können Sie entweder einen Typ vom Typ „ QObject “ direkt als Quelle verwenden oder die gewünschte API in einer „ .rep “-Vorlage definieren, um sie mit dem repc-Compiler zu nutzen.

Wenn Sie bereits über ein vollständig definiertes „ QObject “ verfügen, können Sie es als Quelle verwenden, indem Sie es an „ QRemoteObjectHostBase::enableRemoting()“ übergeben. Auf diese Weise können andere Prozesse oder Geräte anschließend „ dynamics replicas “ des Objekts erstellen, um mit diesem zu interagieren.

Weitere Informationen finden Sie unter „Remote-Objekt-Interaktion“.

Wenn Sie repc mithilfe der Variablen REPC_SOURCE eine Quell-Header-Datei für Ihr Projekt generieren lassen, stehen Ihnen drei verschiedene Optionen zur Implementierung der erforderlichen API zur Verfügung.

Angenommen, Ihr Klassenname lautet „Foo“, dann stehen Ihnen folgende Optionen zur Verfügung:

Weitere Informationen zum Erstellen 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 korrekten Eigenschaftstyps im Header implementiert. „<Type>“ steht hier für den Klassennamen aus der „ .rep “-Datei. Wenn Ihre Klasse also in der Datei „ .rep “ vom Typ „MyType“ ist, wird in der generierten Header-Datei eine Klasse „MyTypeSimpleSource“ deklariert. Dies ist ein schneller Einstieg in die Nutzung der API. Um diese Klasse zu verwenden, müssen Sie eine Klasse schreiben, die von ihr erbt, und alle definierten Slots implementieren, die in der generierten Header-Datei als rein virtuell gekennzeichnet sind. Außerdem müssen Sie Ihrer Klasse die erforderliche Logik hinzufügen, um die freigegebenen Eigenschaften zu verwalten und Signale auszulösen.

Wenn Sie Ihre Implementierungsdetails verbergen möchten, verwenden Sie die zweite in der Header-Datei deklarierte Klasse, die <Type>Source-Klasse. Die Definition dieser Klasse enthält keine Datenelemente und macht zudem die Getter-/Setter-Funktionen rein virtuell. Auch wenn Sie möglicherweise mehr Code schreiben müssen, bietet Ihnen die Verwendung dieser Klasse mehr Flexibilität bei der Implementierung.

Die dritte in der Header-Datei generierte Klasse ist <Type>SourceAPI. Hierbei handelt es sich um eine Template-Klasse, die speziell für die Template-Version von ` QRemoteObjectHostBase::enableRemoting()` vorgesehen ist und es Ihnen ermöglicht, jede ` QObject `-Klasse, die die erforderliche API unterstützt, als Quelle zu verwenden. Verwenden Sie diese Klasse, um Eigenschaften oder Signal-/Slot-Parameter zu verbergen oder zu konvertieren. Wenn Ihre Implementierung nicht die richtige API bereitstellt, werden Warnungen zur Kompilierungszeit ausgegeben.

Hinweis: Replikate und Quellen leiten sich beide von ` QObject` ab; ihre ` QObject `-API wird jedoch niemals offengelegt. Während ein Replikat beispielsweise über ein ` destroyed `-Signal verfügt, wird das ` destroyed `-Signal der Quelle nicht weitergegeben. Die Quelle und jedes ihrer Replikate sind eindeutige `QObjects` mit eigenen Verbindungen und Lebensdauern. Stattdessen wird die exponierte API durch die von repc verwendete Vorlage „ .rep “ definiert. Bei reinen QObjects werden alle API-Elemente in der Vererbungskette von einem bestimmten Vorfahren aus definiert. Es wird immer der Elternteil von „ QObject “ verwendet, es sei denn, Sie definieren „ Q_CLASSINFO("RemoteObject Type") “ in einem Vorfahren. Wenn Sie „ Q_CLASSINFO("RemoteObject Type") “ verwenden, ist die API dieser Klasse die unterste Ebene der verwendeten API.

Quellen identifizieren

Da ein Host-Knoten mehr als eine Quelle gemeinsam nutzen kann, benötigt jede Quelle einen Namen. Alle von repc generierten Header enthalten eine Möglichkeit für den Knoten, den Klassennamen zu ermitteln: „ Q_CLASSINFO “ für die Typen „replica“, „simplesource“ oder „source“; oder eine statische Funktion „ name() “ für den Typ „SourceAPI“. Wenn Sie Ihren eigenen Typ „ QObject “ an „ QRemoteObjectHostBase::enableRemoting()“ übergeben, wird der Name anhand der folgenden Logik ermittelt:

  • Optional kann ein Name an ` QRemoteObjectHostBase::enableRemoting()` übergeben werden. Falls angegeben, wird dieser Name verwendet.
  • Wenn für das Objekt oder einen seiner Vorfahren ein „ Q_CLASSINFO “ vom Typ „RemoteObject Type“ definiert ist, wird dieser Typname verwendet.
  • Ist der `objectName` von ` QObject` gesetzt, wird dieser verwendet.
  • Ist keine der oben genannten Möglichkeiten verfügbar, schlägt der Aufruf von ` QRemoteObjectHostBase::enableRemoting()` fehl und gibt `false` zurück.

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