QRemoteObjectNode Class
Ein Knoten in einem Qt Remote Objects Netzwerk. Mehr...
Kopfzeile: | #include <QRemoteObjectNode> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS RemoteObjects) target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects) |
qmake: | QT += remoteobjects |
In QML: | Node |
Vererbt: | QObject |
Vererbt von: |
Ö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) |
void | remoteObjectAdded(const QRemoteObjectSourceLocation &loc) |
void | remoteObjectRemoved(const QRemoteObjectSourceLocation &loc) |
Reimplementierte geschützte Funktionen
virtual void | timerEvent(QTimerEvent *) override |
Detaillierte Beschreibung
Die Klasse QRemoteObjectNode bietet einen Einstiegspunkt in ein QtRemoteObjects Netzwerk. Ein Netzwerk kann so einfach wie zwei Knoten sein, oder eine beliebig komplexe Menge von Prozessen und Geräten.
Ein QRemoteObjectNode hat keine URL, mit der sich andere Knoten verbinden können, und ist daher nur in der Lage, Replikate zu erwerben. Er ist nicht in der Lage, Quellobjekte gemeinsam zu nutzen (nur QRemoteObjectHost und QRemoteObjectRegistryHost Nodes können diese gemeinsam nutzen).
Knoten können sich direkt über connectToNode miteinander verbinden, oder sie können zur Vereinfachung der Verbindungen die QRemoteObjectRegistry verwenden.
QRemoteObjectRegistry ist eine spezielle Replik, die jedem Knoten zur Verfügung steht, der sich mit der Registry Url verbindet. Sie weiß, wie man sich mit jedem QRemoteObjectSource-Objekt im Netzwerk verbindet.
Siehe auch QRemoteObjectHost und QRemoteObjectRegistryHost.
Dokumentation der Mitgliedstypen
enum QRemoteObjectNode::ErrorCode
Dieser Aufzählungstyp gibt die verschiedenen Fehlercodes an, die mit QRemoteObjectNode Fehlern verbunden sind:
Konstante | Wert | Beschreibung |
---|---|---|
QRemoteObjectNode::NoError | 0 | Kein Fehler. |
QRemoteObjectNode::RegistryNotAcquired | 1 | Die Registry konnte nicht erfasst werden. |
QRemoteObjectNode::RegistryAlreadyHosted | 2 | Die Registry ist bereits definiert und hostet Quellen. |
QRemoteObjectNode::NodeIsNoServer | 3 | Die angegebene QRemoteObjectNode ist kein Host-Knoten. |
QRemoteObjectNode::ServerAlreadyCreated | 4 | Der Host-Knoten wurde bereits initialisiert. |
QRemoteObjectNode::UnintendedRegistryHosting | 5 | Es wurde versucht, einen Host QRemoteObjectNode zu erstellen und sich mit ihm als Registry zu verbinden. |
QRemoteObjectNode::OperationNotValidOnClientNode | 6 | Der versuchte Vorgang ist auf einem Client QRemoteObjectNode nicht gültig. |
QRemoteObjectNode::SourceNotRegistered | 7 | Die angegebene QRemoteObjectSource ist nicht auf diesem Knoten registriert. |
QRemoteObjectNode::MissingObjectName | 8 | Die angegebene QObject hat nicht objectName() gesetzt. |
QRemoteObjectNode::HostUrlInvalid | 9 | Die angegebene URL hat ein ungültiges oder unerkanntes Schema. |
QRemoteObjectNode::ProtocolMismatch | 10 | Der Client und der Server haben unterschiedliche Protokollversionen. |
QRemoteObjectNode::ListenFailed | 11 | Der angegebene Host-Port kann nicht abgehört werden. |
QRemoteObjectNode::SocketAccessError | 12 | Der Client darf sich nicht mit dem Server verbinden. Stellen Sie sicher, dass QRemoteObjectHost::setLocalServerOptions richtig eingestellt ist. |
QRemoteObjectNode::RemoteObjectSchemaHandler
Typedef für eine std::function-Methode, die eine QUrl -Eingabe annehmen kann und für die Erstellung des Kommunikationskanals zwischen diesem Knoten und dem Knoten, der die gewünschte Quelle beherbergt, verantwortlich ist. Da einige Typen von QIODevices (z.B. QSslSocket) zusätzliche Schritte erfordern, bevor das Gerät einsatzbereit ist, ist die Methode für den Aufruf von addClientSideConnection verantwortlich, sobald die Verbindung vollständig hergestellt ist.
Dokumentation der Eigenschaft
heartbeatInterval : int
Heartbeat-Intervall in ms.
Der Heartbeat (nur bei Socket-Verbindungen hilfreich) sendet regelmäßig eine Nachricht an die angeschlossenen Knoten, um festzustellen, ob die Verbindung unterbrochen wurde. Qt Remote Objects versucht, die Verbindung automatisch wiederherzustellen, wenn es einen Verbindungsabbruch feststellt. Diese Funktion kann bei der Erkennung helfen, da der Client erst dann erkennt, dass der Server nicht verfügbar ist, wenn er versucht, Daten zu senden.
Ein Wert von 0
(Standard) deaktiviert den Heartbeat.
Zugriffsfunktionen:
int | heartbeatInterval() const |
void | setHeartbeatInterval(int interval) |
Benachrichtigungssignal:
void | heartbeatIntervalChanged(int heartbeatInterval) |
persistedStore : QRemoteObjectAbstractPersistedStore*
Ermöglicht die Einstellung einer QRemoteObjectAbstractPersistedStore Instanz für den Knoten.
Ermöglicht Replik-PROP-Mitglieder mit der PERSISTED-Eigenschaft, ihren aktuellen Wert zu speichern, wenn die Replik gelöscht wird und einen gespeicherten Wert wiederherzustellen, wenn die Replik das nächste Mal gestartet wird.
Erfordert eine Implementierung der Klasse QRemoteObjectAbstractPersistedStore, um zu steuern, wo und wie die Persistenz gehandhabt wird.
Zugriffsfunktionen:
QRemoteObjectAbstractPersistedStore * | persistedStore() const |
void | setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore) |
registryUrl : QUrl
Diese Eigenschaft enthält die Adresse der von diesem Knoten verwendeten Registry.
Es handelt sich um eine leere QUrl, wenn keine Registrierung verwendet wird.
Zugriffsfunktionen:
QUrl | registryUrl() const |
virtual bool | setRegistryUrl(const QUrl ®istryAddress) |
Dokumentation der Mitgliedsfunktionen
QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)
Standardkonstruktor für QRemoteObjectNode mit der angegebenen parent. Ein auf diese Weise konstruierter Knoten kann nicht mit ihm verbunden werden und kann daher keine Quellobjekte im Netzwerk bereitstellen. Er wird auch keine QRemoteObjectRegistry enthalten, es sei denn, sie wird manuell mit setRegistryUrl gesetzt.
Siehe auch connectToNode und setRegistryUrl.
QRemoteObjectNode::QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr)
QRemoteObjectNode verbunden mit einer {QRemoteObjectRegistry} {Registry}. Ein auf diese Weise konstruierter Knoten kann nicht mit ihm verbunden werden und kann daher keine Quellobjekte auf dem Netz bereitstellen. Das Auffinden und Verbinden mit anderen (Host-)Knoten wird von der durch registryAddress spezifizierten QRemoteObjectRegistry gehandhabt.
Siehe auch connectToNode, setRegistryUrl, QRemoteObjectHost, und QRemoteObjectRegistryHost.
template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())
Gibt einen Zeiger auf ein Replikat vom Typ ObjectType zurück (der ein Template-Parameter ist und von QRemoteObjectReplica erben muss). Das heißt, der Template-Parameter muss ein von repc generierter Typ sein. Der Parameter name kann verwendet werden, um die name anzugeben, die dem Objekt während des Aufrufs QRemoteObjectHost::enableRemoting() gegeben wird.
QRemoteObjectDynamicReplica *QRemoteObjectNode::acquireDynamic(const QString &name)
Gibt eine QRemoteObjectDynamicReplica der Quelle 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 ist. Der angegebene name muss mit dem Namen übereinstimmen, der mit dem passenden enableRemoting verwendet wurde, das das Modell in das Netz gestellt hat. action gibt an, ob das Modell Daten abrufen soll, bevor das Signal initialized gesendet wird. Wenn es auf QtRemoteObjects::PrefetchData gesetzt ist, werden die Daten für die Rollen in rolesHint vorab geholt. Wenn rolesHint leer ist, werden die Daten für alle Rollen, die von Source exponiert werden, im Voraus abgeholt.
Das zurückgegebene Modell ist leer, bis es mit der Quelle initialisiert wird.
void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)
Um QRemoteObjectNode::acquire() Objekte über externe QIODevices zu replizieren, benötigt Qt Remote Objects Zugriff auf den Kommunikationskanal (eine QIODevice) zwischen den jeweiligen Knoten. Dies wird durch den Aufruf addClientSideConnection() ermöglicht, der die ioDevice als Eingabe erhält. Jeder acquire()-Aufruf, der ohne den Aufruf von addClientSideConnection erfolgt, funktioniert trotzdem, aber der Knoten ist nicht in der Lage, das Replikat zu initialisieren, ohne die Verbindung zum Host-Knoten zu erhalten.
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 nicht mehr über ein Netzwerk erreichbar ist.
Sobald ein Client mit einem Host verbunden ist, können gültige Replikate erworben werden, wenn die entsprechende Quelle remoted wird.
Bei Erfolg wird true
zurückgegeben, andernfalls false
(normalerweise eine nicht erkannte URL oder eine Verbindung zu einer bereits verbundenen Adresse).
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
template <typename T> QStringList QRemoteObjectNode::instances() const
Diese Schablonenfunktion (mit einem von repc generierten Typ als Schablonenparameter) gibt die Liste der Namen aller Instanzen dieses Typs im Remote Objects-Netzwerk zurück. Wenn Sie z. B. eine Shape-Klasse in einer .rep-Datei definiert haben und die Klassen Circle und Square von der Source-Definition erben, können sie im Remote Objects-Netzwerk mit enableRemoting freigegeben werden.
Square square; Circle circle; myHost.enableRemoting(&square, "Square"); myHost.enableRemoting(&circle, "Circle");
Dann kann instance verwendet werden, um die verfügbaren Instanzen von Shape zu finden.
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 Funktion überlastet instances().
Diese Komfortfunktion liefert das gleiche Ergebnis wie die Version mit Vorlage, nimmt aber den Namen der Klasse Source als Parameter (typeName), anstatt ihn vom Klassentyp abzuleiten.
QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const
Gibt den letzten Fehlersatz zurück.
void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)
Bereitstellung einer benutzerdefinierten Methode zur Behandlung extern bereitgestellter Schemata
Diese Methode ist an die Registry und externe Schemas gebunden. Durch die Registrierung eines std::function-Handlers für ein externes Schema wird die registrierte Methode aufgerufen, wenn die Registry über die Verfügbarkeit einer von Ihnen erworbenen Quelle informiert wird. Ohne diese Registrierung wäre QtRO nur in der Lage, die "eingebauten" Schemas zu verarbeiten.
Die bereitgestellte Methode handler wird aufgerufen, wenn die Registry ein Source-Objekt auf einem neuen (noch nicht verbundenen) Knoten mit einem {QUrl::schema()} von schema sieht. handler vom Typ QRemoteObjectNode::RemoteObjectSchemaHandler erhält die QUrl des Knotens, der die Source als Eingabeparameter bereitstellt, und ist verantwortlich für den Aufbau des Kommunikationskanals (eine Art QIODevice ) und den Aufruf von addClientSideConnection mit diesem.
Siehe auch RemoteObjectSchemaHandler.
const QRemoteObjectRegistry *QRemoteObjectNode::registry() const
Gibt einen Zeiger auf den Knoten QRemoteObjectRegistry zurück, wenn der Knoten die Funktion Registry verwendet; andernfalls wird nullptr
zurückgegeben.
[signal]
void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
Dieses Signal wird immer dann ausgegeben, wenn ein neues Quellenobjekt zur Registry hinzugefügt wird. Das Signal wird nicht ausgegeben, wenn keine Registry gesetzt ist (d.h. Quellen über Verbindungen, die direkt über connectToNode hergestellt wurden). Der Parameter loc enthält die Informationen über die hinzugefügte Quelle, einschließlich Name, Typ und QUrl des gastgebenden Knotens.
Siehe auch remoteObjectRemoved() und instances().
[signal]
void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)
Dieses Signal wird ausgegeben, wenn ein bekanntes Quellenobjekt aus der Registry entfernt wird. Das Signal wird nicht ausgegeben, wenn keine Registry gesetzt ist (d.h. Quellen über Verbindungen, die direkt über connectToNode hergestellt wurden). Der Parameter loc enthält die Informationen über die entfernte Quelle, einschließlich des Namens, des Typs und des QUrl des gastgebenden Knotens.
Siehe auch remoteObjectAdded und instances.
[virtual]
void QRemoteObjectNode::setName(const QString &name)
Legt name als den internen Namen für diesen Knoten fest. Dieser wird dann als Teil der Protokollierung ausgegeben (falls aktiviert). Dies ist vor allem nützlich, wenn Sie Protokolldaten von mehreren Knoten zusammenführen.
[override virtual protected]
void QRemoteObjectNode::timerEvent(QTimerEvent *)
Reimplements: QObject::timerEvent(QTimerEvent *event).
bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)
Blockiert, bis die Registry dieses Knotens initialisiert ist oder timeout (in Millisekunden) abläuft. Gibt true
zurück, wenn die Registry bei der Rückkehr erfolgreich initialisiert wurde, andernfalls false
.
© 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.