Qt Remote Objects
Konzepte für entfernte Objekte
Qt Remote Objects (QtRO) ist ein für Qt entwickeltes Modul für die Inter-Prozess-Kommunikation (IPC). Dieses Modul erweitert die bestehenden Funktionen von Qt, um den Informationsaustausch zwischen Prozessen oder Computern auf einfache Weise zu ermöglichen.
Eines der Schlüsselmerkmale von Qt, um diesen Informationsaustausch zu ermöglichen, ist die Unterscheidung zwischen der API eines Objekts (definiert durch seine Eigenschaften, Signale und Slots) und der Implementierung dieser API. Der Zweck von QtRO ist es, diese erwartete API zu erfüllen, auch wenn sich die wahre QObject in einem anderen Prozess befindet. Ein Slot, der auf einer Kopie eines Objekts (der Replica in QtRO) aufgerufen wird, wird zur Bearbeitung an das echte Objekt (die Source in QtRO) weitergeleitet. Jede Replik empfängt Aktualisierungen der Quelle, entweder Eigenschaftsänderungen oder ausgesendete Signale.
Ein Replica ist ein leichtgewichtiger Proxy für das Source-Objekt, aber ein Replica unterstützt die gleichen Verbindungen und das Verhalten von QObjects, was es auf die gleiche Weise nutzbar macht wie jedes andere QObject, das Qt bereitstellt. Hinter den Kulissen kümmert sich QtRO um alles, was notwendig ist, damit das Replikat wie seine Quelle aussieht.
Beachten Sie, dass sich Remote Objects anders verhalten als z.B. traditionelle Remote Procedure Call (RPC) Implementierungen:
- Bei RPC stellt der Client eine Anfrage und wartet auf die Antwort.
- Bei RPC sendet der Server nichts an den Client, es sei denn, es handelt sich um eine Antwort auf eine Anfrage.
- Häufig ist RPC so konzipiert, dass verschiedene Clients voneinander unabhängig sind: So können beispielsweise zwei Clients einen Kartendienst nach einer Wegbeschreibung fragen und unterschiedliche Ergebnisse erhalten.
Während es möglich ist, dieses RPC-artige Verhalten in QtRO zu implementieren, als Quellen ohne Eigenschaften und Slots, die Rückgabewerte haben, verbirgt QtRO die Tatsache, dass die Verarbeitung wirklich entfernt ist. Sie lassen sich von einem Knoten die Replik geben, anstatt sie selbst zu erstellen, verwenden möglicherweise die Statussignale (isReplicaValid()), interagieren dann aber mit dem Objekt wie mit jedem anderen QObject-basierten Typ.
Anwendungsfall: GPS
Betrachten Sie einen Sensor wie z.B. einen GPS-Empfänger (Global Positioning System). In QtRO-Begriffen:
- Die Quelle wäre der Prozess, der direkt mit der GPS-Hardware interagiert und Ihren aktuellen Standort ableitet.
- Der Standort würde als QObject Eigenschaften offengelegt; die regelmäßigen Aktualisierungen des Standorts würden diese Eigenschaften aktualisieren und Signale zur Änderung der Eigenschaften ausgeben.
- Replikate würden in anderen Prozessen erstellt und wüssten immer Ihren aktuellen Standort, bräuchten aber keine Logik, um den Standort aus den Sensordaten zu berechnen.
- Die Verbindung mit dem Standortänderungssignal auf dem Replikat würde wie erwartet funktionieren: Das von der Quelle ausgesendete Signal würde die Signalausgabe auf jedem Replikat auslösen.
Anwendungsfall: Zugriff auf Drucker
Betrachten wir einen Dienst, der den Zugriff auf einen Drucker ermöglicht. In QtRO Begriffen:
- Die Quelle wäre der Prozess, der den Drucker direkt steuert.
- Die Tintenstände und der Druckerstatus würden durch die Eigenschaften QObject überwacht. Aktualisierungen dieser Eigenschaften würden Signale für geänderte Eigenschaften ausgeben.
- Die Schlüsseleigenschaft - etwas drucken zu können - muss an den Drucker zurückgegeben werden. Dies stimmt übrigens mit dem Qt-Slot-Mechanismus überein, den QtRO als Möglichkeit für Replikate verwendet, die Quelle aufzurufen. In der Tat gehen Eigenschaften und Signale von der Quelle zu den Replikaten; Slots gehen von der Replik zur Quelle.
- Wenn ein Druckauftrag angenommen wird, ändert sich der Druckerstatus, was zu einer Änderung der Statuseigenschaft führt. Dies würde dann an alle Replikate gemeldet werden.
Verwendung des Moduls
Die Verwendung eines Qt-Moduls erfordert eine Verknüpfung mit der Modulbibliothek, entweder direkt oder über andere Abhängigkeiten. Mehrere Build-Tools bieten hierfür spezielle Unterstützung, darunter CMake und qmake.
Bauen mit CMake
Verwenden Sie den Befehl find_package()
, um die benötigten Modulkomponenten im Paket Qt6
zu finden:
find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
Siehe auch die Übersicht Bauen mit CMake.
Bauen mit qmake
Um das Modul für die Erstellung mit qmake zu konfigurieren, fügen Sie das Modul als Wert der Variable QT
in der .pro-Datei des Projekts hinzu:
QT += remoteobjects
Artikel und Anleitungen
- Erste Schritte mit Qt Remote Objects
- Knotenpunkten
- Quellen
- Replikate
- Registrierung
- Benutzerdefinierte Transporte verwenden
- Compiler
- Interaktion mit entfernten Objekten
- Fehlersuche
- Protokoll-Versionierung
- Beispiele
API-Referenz
Lizenzen
Qt Remote Objects ist unter kommerziellen Lizenzen von The Qt Company erhältlich. Darüber hinaus ist es unter der GNU Lesser General Public License, Version 3, oder der GNU General Public License, Version 2, erhältlich. Weitere Einzelheiten finden Sie unter Qt-Lizenzierung.
© 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.