Auf dieser Seite

Erste Schritte mit Qt Remote Objects

Einführung

Das Modul „ Qt Remote Objects “ bietet eine einfache Möglichkeit, Qt-APIs zwischen Prozessen und Geräten gemeinsam zu nutzen. Damit dies funktioniert, benötigen wir einen Datenkanal zwischen Prozessen und Geräten. Um diesen Datenkanal einzurichten, benötigen Sie zunächst einen „ QRemoteObjectNode “.

In QtRO ist ein Knoten ein Endpunkt für die Kommunikation. In einem Netzwerk aus Remote-Objekten benötigt jeder Teilnehmer – sei es ein Prozess oder ein Gerät – einen eigenen Knoten. QtRO ist ein Peer-to-Peer-Netzwerk, in dem die verbundenen Knoten die Verbindungen im Netzwerk bilden.

Knoten allein sind nicht besonders nützlich. Ihr Wert zeigt sich jedoch, wenn man einem Knoten „ QObject “-Klassen hinzufügt, um diese gemeinsam zu nutzen. Dann kann jeder Peer-Knoten eine Kopie oder Instanz des gemeinsam genutzten Objekts vom Host-Knoten anfordern, also dem Knoten, der es bereitstellt.

Anders als bei der Verwendung normaler Klasseninstanzen (mit eigenständigen Eigenschaften und Signalausgaben) synchronisiert QtRO Änderungen am freigegebenen Objekt automatisch über alle seine Kopien hinweg. Mit wenigen Ausnahmen verfügen diese Kopien über dieselbe Qt-API wie das Originalobjekt und sind so konzipiert, dass sie genau so verwendet werden können, als wäre das Originalobjekt verfügbar.

In QtRO wird das Originalobjekt als „Source“ bezeichnet. Es handelt sich um eine vollständig implementierte C++-Klasse mit der notwendigen Geschäftslogik, um die erforderliche Funktionalität bereitzustellen. Kopien dieses Objekts werden als „Replicas“bezeichnet. Sie müssen keinen C++-Code für eine Replik schreiben; stattdessen fordern Sie eine Instanz von einem Knoten an. Zwar benötigen Sie etwas Code, um die Replik zu nutzen – beispielsweise zum Verbinden von Signalen mit Ihren eigenen Slots –, doch müssen Sie das interne Verhalten nicht implementieren – das wurde bereits in der Quelle für Sie erledigt.

Da sich die Quelle in einem anderen Prozess oder sogar auf einem anderen Gerät befinden kann, gibt es bei QtRO Faktoren, die Sie berücksichtigen müssen und auf die Sie bei der Entwicklung ohne Interprozesskommunikation (IPC) normalerweise nicht stoßen würden. Konkret: Was passiert, wenn der Prozess oder das Gerät nicht vorhanden ist? Hier kommen die Erweiterungen der Replica-API ins Spiel:

  • Das Signal ` initialized()` wird ausgelöst, sobald die Replik den Quellzustand aus dem QtRO-Netzwerk empfangen hat.
  • Sowohl die Eigenschaft „ isReplicaValid “ als auch das Signal „ stateChanged()“ warnen Sie, wenn die Verbindung unterbrochen wird.

Über QtRO gemeinsam genutzte Objekte verwenden für die gesamte Kommunikation die Verbindungen (Conduits) zwischen den Knoten. Wenn du einen „ QObject “ gemeinsam nutzen möchtest, musst du einen Host-Knoten mit einer URL erstellen, mit der sich andere Knoten verbinden können. Sie können auch die Registry nutzen, um Verbindungen zu erleichtern, aber Ihre Knoten, die Quellen freigeben, müssen dennoch Host-Knoten sein. Jedes freigegebene Objekt erhält einen Namen (ein „ QString “), der zur Identifizierung im QtRO-Netzwerk dient.

Implementierung

Um die Verwendung von Remote-Objekten zu veranschaulichen, müssen wir auf der Quellseite Folgendes tun:

  1. Erstellen Sie das Quellobjekt, das auf andere Knoten repliziert wird – mit oder ohne Verwendung von repc(dem „ Qt Remote Objects “-Compiler).
  2. Optional die Registry erstellen. Andernfalls direkte Verbindungen verwenden.
  3. Erstellen Sie einen Host-Knoten, damit das Quellobjekt freigegeben werden kann.
  4. Rufen Sie die Funktion ` enableRemoting()` des Knotens auf, um das Quellobjekt freizugeben.

Auf der Replikseite müssen wir:

  1. Verwenden Sie optional repc, um einen Replica -Header für Ihr Projekt zu generieren.
  2. Erstellen Sie den Knoten, der eine Verbindung zum Quell -Hostknoten herstellt.
  3. Rufen Sie die Funktion ` acquire()` des Knotens auf, um einen Zeiger auf eine Replik zu erstellen.

Die folgenden Beispiele veranschaulichen sowohl mit „repc“ kompilierte statische Objekte als auch dynamische Quellobjekte. Zudem zeigen sie sowohl direkte Verbindungen als auch Verbindungen, die eine Registry zwischen den Knoten nutzen.

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