Auf dieser Seite

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:

QRemoteObjectHostBase

Öffentliche Typen

enum ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, SocketAccessError }
RemoteObjectSchemaHandler

Eigenschaften

Öffentliche Funktionen

QRemoteObjectNode(QObject *parent = nullptr)
QRemoteObjectNode(const QUrl &registryAddress, 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 &registryAddress)
bool waitForRegistry(int timeout = 30000)

Signale

void heartbeatIntervalChanged(int heartbeatInterval)
(since 6.12) void persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore)
(since 6.12) void registryUrlChanged(const QUrl &registryUrl)
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:

KonstanteWertBeschreibung
QRemoteObjectNode::NoError0Kein Fehler.
QRemoteObjectNode::RegistryNotAcquired1Die Registrierung konnte nicht abgerufen werden.
QRemoteObjectNode::RegistryAlreadyHosted2Die Registrierung ist bereits definiert und hostet Quellen.
QRemoteObjectNode::NodeIsNoServer3Die angegebene „ QRemoteObjectNode “ ist kein Host-Knoten.
QRemoteObjectNode::ServerAlreadyCreated4Der Hostknoten wurde bereits initialisiert.
QRemoteObjectNode::UnintendedRegistryHosting5Es wurde versucht, eine Host- QRemoteObjectNode zu erstellen und eine Verbindung zu sich selbst als Registrierungsstelle herzustellen.
QRemoteObjectNode::OperationNotValidOnClientNode6Der versuchte Vorgang ist auf einem Client- QRemoteObjectNode nicht zulässig.
QRemoteObjectNode::SourceNotRegistered7Das angegebene QRemoteObjectSource ist auf diesem Knoten nicht registriert.
QRemoteObjectNode::MissingObjectName8Für das angegebene „ QObject “ ist „ objectName()“ nicht festgelegt.
QRemoteObjectNode::HostUrlInvalid9Die angegebene URL hat ein ungültiges oder unbekanntes Schema.
QRemoteObjectNode::ProtocolMismatch10Client und Server verwenden unterschiedliche Protokollversionen.
QRemoteObjectNode::ListenFailed11Der angegebene Host-Port kann nicht abgehört werden.
QRemoteObjectNode::SocketAccessError12Der 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 &registryAddress)

Notifier-Signal:

void registryUrlChanged(const QUrl &registryUrl)

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 &registryAddress, 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 &registryUrl)

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.