QRemoteObjectNode Class
Ein Knoten in einem „ Qt Remote Objects “-Netzwerk. Mehr...
| Überschrift: | #include <QRemoteObjectNode> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS RemoteObjects) target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects) |
| qmake: | QT += remoteobjects |
| In QML: | Node |
| Erbt von: | QObject |
| Vererbt an: |
Öffentliche Typen
| enum | ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, SocketAccessError } |
| RemoteObjectSchemaHandler |
Eigenschaften
- heartbeatInterval : int
- persistedStore : QRemoteObjectAbstractPersistedStore*
- registryUrl : QUrl
Öffentliche Funktionen
| QRemoteObjectNode(QObject *parent = nullptr) | |
| QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr) | |
| ObjectType * | acquire(const QString &name = QString()) |
| QRemoteObjectDynamicReplica * | acquireDynamic(const QString &name) |
| QAbstractItemModelReplica * | acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList<int> &rolesHint = {}) |
| void | addClientSideConnection(QIODevice *ioDevice) |
| bool | connectToNode(const QUrl &address) |
| int | heartbeatInterval() const |
| QStringList | instances() const |
| QStringList | instances(QStringView typeName) const |
| QRemoteObjectNode::ErrorCode | lastError() const |
| QRemoteObjectAbstractPersistedStore * | persistedStore() const |
| void | registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler) |
| const QRemoteObjectRegistry * | registry() const |
| QUrl | registryUrl() const |
| void | setHeartbeatInterval(int interval) |
| virtual void | setName(const QString &name) |
| void | setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore) |
| virtual bool | setRegistryUrl(const QUrl ®istryAddress) |
| bool | waitForRegistry(int timeout = 30000) |
Signale
| void | heartbeatIntervalChanged(int heartbeatInterval) |
(since 6.12) void | persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore) |
(since 6.12) void | registryUrlChanged(const QUrl ®istryUrl) |
| void | remoteObjectAdded(const QRemoteObjectSourceLocation &loc) |
| void | remoteObjectRemoved(const QRemoteObjectSourceLocation &loc) |
Neu implementierte geschützte Funktionen
| virtual void | timerEvent(QTimerEvent *) override |
Ausführliche Beschreibung
Die Klasse `QRemoteObjectNode` bietet einen Einstiegspunkt in ein „ QtRemoteObjects “-Netzwerk. Ein Netzwerk kann aus nur zwei Knoten bestehen oder eine beliebig komplexe Gruppe von Prozessen und Geräten umfassen.
Ein `QRemoteObjectNode` verfügt nicht über eine URL, über die andere Knoten eine Verbindung herstellen können, und kann daher nur Replikate abrufen. Er kann keine Quellobjekte freigeben (dies ist nur bei ` QRemoteObjectHost `- und ` QRemoteObjectRegistryHost `-Knoten möglich).
Knoten können sich über „ connectToNode “ direkt miteinander verbinden oder die „ QRemoteObjectRegistry “ nutzen, um Verbindungen zu vereinfachen.
Die „ QRemoteObjectRegistry “ ist eine spezielle Replik, die jedem Knoten zur Verfügung steht, der eine Verbindung zur Registry-URL herstellt. Sie weiß, wie eine Verbindung zu jedem „QRemoteObjectSource“-Objekt im Netzwerk hergestellt werden kann.
Siehe auch „ QRemoteObjectHost “ und „ QRemoteObjectRegistryHost “.
Dokumentation zu Mitgliedstypen
enum QRemoteObjectNode::ErrorCode
Dieser Enum-Typ definiert die verschiedenen Fehlercodes, die mit Fehlern von „ QRemoteObjectNode “ verbunden sind:
| Konstante | Wert | Beschreibung |
|---|---|---|
QRemoteObjectNode::NoError | 0 | Kein Fehler. |
QRemoteObjectNode::RegistryNotAcquired | 1 | Die Registrierung konnte nicht abgerufen werden. |
QRemoteObjectNode::RegistryAlreadyHosted | 2 | Die Registrierung ist bereits definiert und hostet Quellen. |
QRemoteObjectNode::NodeIsNoServer | 3 | Die angegebene „ QRemoteObjectNode “ ist kein Host-Knoten. |
QRemoteObjectNode::ServerAlreadyCreated | 4 | Der Hostknoten wurde bereits initialisiert. |
QRemoteObjectNode::UnintendedRegistryHosting | 5 | Es wurde versucht, eine Host- QRemoteObjectNode zu erstellen und eine Verbindung zu sich selbst als Registrierungsstelle herzustellen. |
QRemoteObjectNode::OperationNotValidOnClientNode | 6 | Der versuchte Vorgang ist auf einem Client- QRemoteObjectNode nicht zulässig. |
QRemoteObjectNode::SourceNotRegistered | 7 | Das angegebene QRemoteObjectSource ist auf diesem Knoten nicht registriert. |
QRemoteObjectNode::MissingObjectName | 8 | Für das angegebene „ QObject “ ist „ objectName()“ nicht festgelegt. |
QRemoteObjectNode::HostUrlInvalid | 9 | Die angegebene URL hat ein ungültiges oder unbekanntes Schema. |
QRemoteObjectNode::ProtocolMismatch | 10 | Client und Server verwenden unterschiedliche Protokollversionen. |
QRemoteObjectNode::ListenFailed | 11 | Der angegebene Host-Port kann nicht abgehört werden. |
QRemoteObjectNode::SocketAccessError | 12 | Der Client darf keine Verbindung zum Server herstellen. Stellen Sie sicher, dass „ QRemoteObjectHost::setLocalServerOptions “ entsprechend eingestellt ist. |
QRemoteObjectNode::RemoteObjectSchemaHandler
Typedef für eine std::function-Methode, die eine „ QUrl “-Eingabe entgegennehmen kann und für die Einrichtung des Kommunikationskanals zwischen diesem Knoten und dem Knoten zuständig ist, auf dem sich die gewünschte Quelle befindet. Da bei einigen Arten von QIODevices (z. B. QSslSocket) zusätzliche Schritte erforderlich sind, bevor das Gerät einsatzbereit ist, ist die Methode dafür zuständig, addClientSideConnection aufzurufen, sobald die Verbindung vollständig hergestellt ist.
Dokumentation der Eigenschaften
heartbeatInterval : int
Heartbeat-Intervall in ms.
Der Heartbeat (nur bei Socket-Verbindungen sinnvoll) sendet in regelmäßigen Abständen eine Nachricht an verbundene Knoten, um festzustellen, ob die Verbindung unterbrochen wurde. Qt Remote Objects versucht, die Verbindung automatisch wiederherzustellen, wenn eine unterbrochene Verbindung erkannt wird. Diese Funktion kann bei dieser Erkennung helfen, da der Client erst dann feststellt, dass der Server nicht erreichbar ist, wenn er versucht, Daten zu senden.
Der Wert „ 0 “ (Standard) deaktiviert den Heartbeat.
Zugriffsfunktionen:
| int | heartbeatInterval() const |
| void | setHeartbeatInterval(int interval) |
Benachrichtigungssignal:
| void | heartbeatIntervalChanged(int heartbeatInterval) |
persistedStore : QRemoteObjectAbstractPersistedStore*
Ermöglicht die Festlegung einer „ QRemoteObjectAbstractPersistedStore “-Instanz für den Knoten.
Ermöglicht es Replik -PROP- Mitgliedern mit dem Merkmal „PERSISTED“, ihren aktuellen Wert zu speichern, wenn die Replik gelöscht wird, und einen gespeicherten Wert beim nächsten Start der Replik wiederherzustellen.
Erfordert eine Implementierung der Klasse „ QRemoteObjectAbstractPersistedStore “, um zu steuern, wo und wie die Persistenz gehandhabt wird.
Zugriffsfunktionen:
| QRemoteObjectAbstractPersistedStore * | persistedStore() const |
| void | setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore) |
Notifier-Signal:
| void | persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore) |
registryUrl : QUrl
Diese Eigenschaft enthält die Adresse des von diesem Knoten verwendeten Registry.
Ist keine Registrierung in Gebrauch, handelt es sich um eine leere Registrierung „ QUrl “.
Zugriffsfunktionen:
| QUrl | registryUrl() const |
| virtual bool | setRegistryUrl(const QUrl ®istryAddress) |
Notifier-Signal:
| void | registryUrlChanged(const QUrl ®istryUrl) |
Dokumentation der Mitgliedsfunktionen
QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)
Standardkonstruktor für `QRemoteObjectNode` mit dem angegebenen ` parent`. Ein auf diese Weise erstellter Knoten kann nicht verbunden werden und kann daher keine `Source`-Objekte im Netzwerk bereitstellen. Er enthält auch keine ` QRemoteObjectRegistry`, es sei denn, diese wird manuell über ` setRegistryUrl` festgelegt.
Siehe auch „ connectToNode “ und „ setRegistryUrl “.
QRemoteObjectNode::QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr)
QRemoteObjectNode, verbunden mit einer {QRemoteObjectRegistry} {Registry}. Ein auf diese Weise erstellter Knoten kann keine Verbindung herstellen und daher keine Quellobjekte im Netzwerk bereitstellen. Das Auffinden und Herstellen von Verbindungen zu anderen (Host-)Knoten wird von der unter registryAddress angegebenen QRemoteObjectRegistry übernommen.
Siehe auch connectToNode, setRegistryUrl, QRemoteObjectHost und QRemoteObjectRegistryHost.
template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())
Gibt einen Zeiger auf eine Replik vom Typ „ObjectType“ zurück (wobei es sich um einen Vorlagenparameter handelt, der von „ QRemoteObjectReplica “ erben muss). Das heißt, der Vorlagenparameter muss ein von „repc“ generierter Typ sein. Mit dem Parameter „ name “ kann die „ name “ angegeben werden, die dem Objekt beim Aufruf von „ QRemoteObjectHost::enableRemoting()“ übergeben wurde.
QRemoteObjectDynamicReplica *QRemoteObjectNode::acquireDynamic(const QString &name)
Gibt ein ` QRemoteObjectDynamicReplica ` der Quell name zurück.
QAbstractItemModelReplica *QRemoteObjectNode::acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList<int> &rolesHint = {})
Gibt einen Zeiger auf eine Replik zurück, die speziell von QAbstractItemModel abgeleitet wurde. Die angegebene name muss mit dem Namen übereinstimmen, der bei der entsprechenden enableRemoting verwendet wurde, über die das Modell ins Netzwerk gestellt wurde. action legt fest, ob das Modell Daten abrufen soll, bevor das Signal initialized ausgesendet wird. Ist der Wert auf QtRemoteObjects::PrefetchData gesetzt, werden die Daten für die Rollen im rolesHint vorab abgerufen. Ist „ rolesHint “ leer, werden die Daten für alle von „Source“ bereitgestellten Rollen vorab abgerufen.
Das zurückgegebene Modell ist leer, bis es mit der Quelle initialisiert wird.
void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)
Um Replica-Objekte über externe QIODevices mit ` QRemoteObjectNode::acquire()` zu initialisieren, benötigt ` Qt Remote Objects ` Zugriff auf den Kommunikationskanal (ein ` QIODevice`) zwischen den jeweiligen Knoten. Dies wird durch den Aufruf von `addClientSideConnection()` ermöglicht, der ` ioDevice ` als Eingabe benötigt. Jeder Aufruf von ` acquire()` ohne vorherigen Aufruf von `addClientSideConnection` funktioniert zwar weiterhin, aber der Knoten kann die Replik nicht initialisieren, ohne dass ihm die Verbindung zum Host-Knoten bereitgestellt wird.
Siehe auch QRemoteObjectHostBase::addHostSideConnection.
[invokable] bool QRemoteObjectNode::connectToNode(const QUrl &address)
Stellt eine Verbindung zwischen einem Client-Knoten und dem Host-Knoten unter address her.
Die Verbindungen bleiben gültig, bis der Host-Knoten gelöscht wird oder über das Netzwerk nicht mehr erreichbar ist.
Sobald ein Client mit einem Host verbunden ist, können gültige Replikate abgerufen werden, sofern die entsprechende Quelle per Fernzugriff bereitgestellt wird.
Gibt bei Erfolg true zurück, andernfalls false (in der Regel eine unbekannte URL oder eine Verbindung zu einer bereits verbundenen Adresse).
Hinweis: Diese Funktion kann über das Metaobjektsystem und aus QML aufgerufen werden. Siehe Q_INVOKABLE.
template <typename T> QStringList QRemoteObjectNode::instances() const
Diese Vorlagenfunktion (die einen von repc generierten Typ als Vorlagenparameter verwendet) gibt die Liste der Namen aller Instanzen dieses Typs im Remote-Objects-Netzwerk zurück. Wenn Sie beispielsweise eine Klasse „Shape“ in einer .rep-Datei definiert haben und die Klassen „Circle“ und „Square“ von der Definition „Source“ erben, können diese über enableRemoting im Remote-Objects-Netzwerk freigegeben werden.
Square square;
Circle circle;
myHost.enableRemoting(&square, "Square");
myHost.enableRemoting(&circle, "Circle");Mit `instance` lassen sich dann die verfügbaren Instanzen von `Shape` ermitteln.
QStringList instances = clientNode.instances<Shape>();
// will return a QStringList containing "Circle" and "Square"
auto instance1 = clientNode.acquire<Shape>("Circle");
auto instance2 = clientNode.acquire<Shape>("Square");
...QStringList QRemoteObjectNode::instances(QStringView typeName) const
Diese Komfortfunktion liefert dasselbe Ergebnis wie die Template-Version, nimmt jedoch den Namen der Quellklasse als Parameter entgegen (typeName), anstatt ihn aus dem Klassentyp abzuleiten.
Diese Funktion überlädt ` QRemoteObjectNode::instances()`.
QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const
Gibt den letzten Fehlersatz zurück.
[signal, since 6.12] void QRemoteObjectNode::persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore)
Dieses Signal wird ausgelöst, wenn sich die Eigenschaft „ persistedStore “ auf „ persistedStore “ ändert.
Hinweis: Notifier -Signal für die Eigenschaft „ persistedStore “.
Diese Funktion wurde in Qt 6.12 eingeführt.
void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)
Bereitstellung einer benutzerdefinierten Methode zur Verarbeitung extern bereitgestellter Schemata
Diese Methode ist mit der Registry und externen Schemata verknüpft. Durch die Registrierung eines std::function-Handlers für ein externes Schema wird die registrierte Methode aufgerufen, sobald die Registry darüber informiert wird, dass eine von Ihnen erworbene Quelle verfügbar ist. Ohne diese Registrierung könnte QtRO nur die „integrierten“ Schemata verarbeiten.
Die bereitgestellte Methode „ handler “ wird aufgerufen, wenn die Registry ein „Source“-Objekt auf einem neuen (noch nicht verbundenen) „Node“ mit einem {QUrl::schema()} von schema erkennt. Die Methode „ handler “ vom Typ „ QRemoteObjectNode::RemoteObjectSchemaHandler “ erhält als Eingabeparameter den „ QUrl “ des Knotens, der die Quelle bereitstellt, und ist dafür verantwortlich, den Kommunikationskanal (eine Art „ QIODevice “) herzustellen und damit „ addClientSideConnection “ aufzurufen.
Siehe auch RemoteObjectSchemaHandler.
const QRemoteObjectRegistry *QRemoteObjectNode::registry() const
Gibt einen Zeiger auf die „ QRemoteObjectRegistry “ des Knotens zurück, sofern der Knoten die Registry-Funktion nutzt; andernfalls wird „ nullptr “ zurückgegeben.
[signal, since 6.12] void QRemoteObjectNode::registryUrlChanged(const QUrl ®istryUrl)
Dieses Signal wird ausgelöst, wenn sich die Eigenschaft „ registryUrl “ auf „ registryUrl “ ändert.
Hinweis: Notifier -Signal für die Eigenschaft „ registryUrl “.
Diese Funktion wurde in Qt 6.12 eingeführt.
[signal] void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
Dieses Signal wird immer dann ausgelöst, wenn ein neues Source-Objekt zur Registry hinzugefügt wird. Das Signal wird nicht ausgelöst, wenn keine Registry festgelegt ist (d. h. bei Quellen, die über Verbindungen bestehen, die direkt über connectToNode hergestellt wurden). Der Parameter „ loc “ enthält Informationen über die hinzugefügte Quelle, darunter Name, Typ und die Adresse QUrl des hostenden Knotens.
Siehe auch remoteObjectRemoved() und instances().
[signal] void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)
Dieses Signal wird immer dann ausgelöst, wenn ein bekanntes Source-Objekt aus der Registry entfernt wird. Das Signal wird nicht ausgelöst, wenn keine Registry-Einstellung vorliegt (d. h. bei Quellen über Verbindungen, die direkt über connectToNode hergestellt wurden). Der Parameter „ loc “ enthält Informationen über die entfernte Quelle, darunter Name, Typ und die Adresse QUrl des hostenden Knotens.
Siehe auch remoteObjectAdded und instances.
[virtual] void QRemoteObjectNode::setName(const QString &name)
Legt „ name “ als internen Namen für diesen Knoten fest. Dieser wird dann im Rahmen der Protokollierung ausgegeben (sofern diese aktiviert ist). Dies ist vor allem dann nützlich, wenn Sie Protokolldaten von mehreren Knoten zusammenführen.
[override virtual protected] void QRemoteObjectNode::timerEvent(QTimerEvent *)
Implementiert: ` QObject::timerEvent(QTimerEvent *event)`.
bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)
Blockiert, bis die Registry dieses Knotens initialisiert ist oder die Zeit „ timeout “ (in Millisekunden) abgelaufen ist. Gibt „ true “ zurück, wenn die Registry bei der Rückgabe erfolgreich initialisiert wurde, andernfalls „ false “.
© 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.