Sur cette page

QRemoteObjectNode Class

Un nœud sur un réseau Qt Remote Objects. Plus d'informations...

En-tête : #include <QRemoteObjectNode>
CMake : find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects)
qmake : QT += remoteobjects
En QML : Node
Hérite : QObject
Hérité par :

QRemoteObjectHostBase

Types publics

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

Propriétés

Fonctions publiques

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)

Signaux

void heartbeatIntervalChanged(int heartbeatInterval)
void remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
void remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)

Fonctions protégées réimplémentées

virtual void timerEvent(QTimerEvent *) override

Description détaillée

La classe QRemoteObjectNode fournit un point d'entrée à un réseau QtRemoteObjects. Un réseau peut être aussi simple que deux nœuds, ou un ensemble arbitrairement complexe de processus et de dispositifs.

Un QRemoteObjectNode n'a pas d'url à laquelle d'autres nœuds peuvent se connecter, et ne peut donc acquérir que des répliques. Il n'est pas en mesure de partager des objets sources (seuls les nœuds QRemoteObjectHost et QRemoteObjectRegistryHost peuvent partager).

Les nœuds peuvent se connecter les uns aux autres directement en utilisant connectToNode, ou ils peuvent utiliser QRemoteObjectRegistry pour simplifier les connexions.

QRemoteObjectRegistry est une réplique spéciale disponible pour chaque nœud qui se connecte à l'URL du registre. Il sait comment se connecter à chaque objet QRemoteObjectSource sur le réseau.

Voir également QRemoteObjectHost et QRemoteObjectRegistryHost.

Documentation sur les types de membres

enum QRemoteObjectNode::ErrorCode

Ce type d'énumération spécifie les différents codes d'erreur associés aux erreurs QRemoteObjectNode:

ConstanteValeurDescription de l'erreur
QRemoteObjectNode::NoError0Pas d'erreur.
QRemoteObjectNode::RegistryNotAcquired1Le registre n'a pas pu être acquis.
QRemoteObjectNode::RegistryAlreadyHosted2Le registre est déjà défini et héberge des sources.
QRemoteObjectNode::NodeIsNoServer3Le site QRemoteObjectNode n'est pas un nœud hôte.
QRemoteObjectNode::ServerAlreadyCreated4Le nœud hôte a déjà été initialisé.
QRemoteObjectNode::UnintendedRegistryHosting5Une tentative a été faite pour créer un hôte QRemoteObjectNode et se connecter à lui-même en tant que registre.
QRemoteObjectNode::OperationNotValidOnClientNode6La tentative d'opération n'est pas valide sur un client QRemoteObjectNode.
QRemoteObjectNode::SourceNotRegistered7Le QRemoteObjectSource donné n'est pas enregistré sur ce nœud.
QRemoteObjectNode::MissingObjectName8L'adresse QObject donnée n'a pas la valeur objectName() définie.
QRemoteObjectNode::HostUrlInvalid9L'url donnée a un schéma invalide ou non reconnu.
QRemoteObjectNode::ProtocolMismatch10Le client et le serveur ont des versions de protocole différentes.
QRemoteObjectNode::ListenFailed11Impossible d'écouter sur le port hôte spécifié.
QRemoteObjectNode::SocketAccessError12Le client n'est pas autorisé à se connecter au serveur. Assurez-vous que QRemoteObjectHost::setLocalServerOptions est correctement configuré.

QRemoteObjectNode::RemoteObjectSchemaHandler

Typedef pour une méthode std::function qui peut prendre une entrée QUrl et qui est responsable de la création du canal de communication entre ce nœud et le nœud hébergeant la source souhaitée. Comme certains types de dispositifs QIODevices (par exemple, QSslSocket) nécessitent des étapes supplémentaires avant que le dispositif ne soit prêt à être utilisé, la méthode est chargée d'appeler addClientSideConnection une fois que la connexion est entièrement établie.

Documentation sur les propriétés

heartbeatInterval : int

Intervalle de battement de cœur en ms.

Le battement de cœur (utile uniquement pour les connexions par socket) enverra périodiquement un message aux nœuds connectés pour détecter si la connexion a été interrompue. Qt Remote Objects tentera de se reconnecter automatiquement s'il détecte une connexion interrompue. Cette fonction peut aider à cette détection puisque le client ne détectera l'indisponibilité du serveur que lorsqu'il essaiera d'envoyer des données.

Une valeur de 0 (valeur par défaut) désactive le battement de cœur.

Fonctions d'accès :

int heartbeatInterval() const
void setHeartbeatInterval(int interval)

Signal de notification :

void heartbeatIntervalChanged(int heartbeatInterval)

persistedStore : QRemoteObjectAbstractPersistedStore*

Permet de définir une instance QRemoteObjectAbstractPersistedStore pour le nœud.

Permet aux membres PROP des répliques avec le trait PERSISTANCE de sauvegarder leur valeur actuelle lorsque la réplique est supprimée et de restaurer une valeur stockée la prochaine fois que la réplique est démarrée.

Nécessite une implémentation de la classe QRemoteObjectAbstractPersistedStore pour contrôler où et comment la persistance est gérée.

Fonctions d'accès :

QRemoteObjectAbstractPersistedStore *persistedStore() const
void setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore)

registryUrl : QUrl

Cette propriété contient l'adresse du site Registry utilisé par ce nœud.

Il s'agit d'une adresse QUrl vide si aucun registre n'est utilisé.

Fonctions d'accès :

QUrl registryUrl() const
virtual bool setRegistryUrl(const QUrl &registryAddress)

Documentation des fonctions membres

QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)

Constructeur par défaut de QRemoteObjectNode avec la valeur parent. Un nœud construit de cette manière ne peut pas être connecté et ne peut donc pas exposer d'objets Source sur le réseau. Il n'inclura pas non plus de QRemoteObjectRegistry, sauf s'il est défini manuellement à l'aide de setRegistryUrl.

Voir également connectToNode et setRegistryUrl.

QRemoteObjectNode::QRemoteObjectNode(const QUrl &registryAddress, QObject *parent = nullptr)

QRemoteObjectNode connecté à un {QRemoteObjectRegistry} {Registry}. Un nœud construit de cette manière ne peut pas être connecté et ne peut donc pas exposer d'objets source sur le réseau. La recherche d'autres nœuds (hôtes) et la connexion à ceux-ci sont gérées par le site QRemoteObjectRegistry spécifié par registryAddress.

Voir également connectToNode, setRegistryUrl, QRemoteObjectHost, et QRemoteObjectRegistryHost.

template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())

Renvoie un pointeur sur une réplique de type ObjectType (qui est un paramètre modèle et doit hériter de QRemoteObjectReplica). En d'autres termes, le paramètre modèle doit être un type généré par repc. Le paramètre name peut être utilisé pour spécifier le name donné à l'objet lors de l'appel QRemoteObjectHost::enableRemoting().

QRemoteObjectDynamicReplica *QRemoteObjectNode::acquireDynamic(const QString &name)

Renvoie une adresse QRemoteObjectDynamicReplica de la source name.

QAbstractItemModelReplica *QRemoteObjectNode::acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList<int> &rolesHint = {})

Renvoie un pointeur vers une réplique spécifiquement dérivée de QAbstractItemModel. Le nom name fourni doit correspondre au nom utilisé avec enableRemoting qui a placé le modèle sur le réseau. action spécifie si le modèle doit récupérer les données avant que le signal initialized ne soit émis. S'il est défini à QtRemoteObjects::PrefetchData, les données pour les rôles dans rolesHint seront récupérées au préalable. Si rolesHint est vide, alors les données de tous les rôles exposés par Source seront récupérées au préalable.

Le modèle retourné sera vide jusqu'à ce qu'il soit initialisé avec la source.

void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)

Pour QRemoteObjectNode::acquire() répliquer des objets sur des appareils QIOD externes, Qt Remote Objects doit avoir accès au canal de communication ( QIODevice) entre les nœuds respectifs. C'est l'appel addClientSideConnection() qui permet cela, en prenant l'adresse ioDevice comme entrée. Tout appel à acquire() effectué sans appeler addClientSideConnection fonctionnera toujours, mais le nœud ne sera pas en mesure d'initialiser la réplique sans avoir reçu la connexion au nœud hôte.

Voir également QRemoteObjectHostBase::addHostSideConnection.

[invokable] bool QRemoteObjectNode::connectToNode(const QUrl &address)

Connecte un nœud client au nœud hôte à l'adresse address.

Les connexions resteront valables jusqu'à ce que le nœud hôte soit supprimé ou ne soit plus accessible via un réseau.

Une fois qu'un client est connecté à un hôte, des répliques valides peuvent être acquises si la source correspondante est remotorisée.

Retourne true en cas de succès, false dans le cas contraire (généralement une url non reconnue, ou une connexion à une adresse déjà connectée).

Note : Cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.

template <typename T> QStringList QRemoteObjectNode::instances() const

Cette fonction modèle (qui prend un type généré par repc comme paramètre modèle) renvoie la liste des noms de toutes les instances de ce type sur le réseau d'objets distants. Par exemple, si vous avez une classe Shape définie dans un fichier .rep, et que les classes Circle et Square héritent de la définition Source, elles peuvent être partagées sur le réseau d'objets distants à l'aide de enableRemoting.

Square square;
Circle circle;
myHost.enableRemoting(&square, "Square");
myHost.enableRemoting(&circle, "Circle");

L'instance peut alors être utilisée pour trouver les instances disponibles de Shape.

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

Cette fonction de commodité fournit le même résultat que la version modélisée, mais prend le nom de la classe Source en paramètre (typeName) au lieu de le dériver du type de classe.

Cette fonction surcharge QRemoteObjectNode::instances().

QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const

Renvoie le dernier jeu d'erreurs.

void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)

Fournir une méthode personnalisée pour gérer les schémas fournis de l'extérieur

Cette méthode est liée au registre et aux schémas externes. En enregistrant un gestionnaire std::function pour un schéma externe, la méthode enregistrée sera appelée lorsque le registre sera notifié de la disponibilité d'une source que vous avez acquise. Sans cet enregistrement, QtRO ne pourrait gérer que les schémas "intégrés".

La méthode fournie, handler, sera appelée lorsque le registre verra un objet Source sur un nouveau nœud (pas encore connecté) avec un {QUrl::schema()} de schema. Le handler, de type QRemoteObjectNode::RemoteObjectSchemaHandler, obtiendra le QUrl du nœud fournissant la Source comme paramètre d'entrée, et est responsable de l'établissement du canal de communication (un QIODevice quelconque) et de l'appel de addClientSideConnection avec celui-ci.

Voir également RemoteObjectSchemaHandler.

const QRemoteObjectRegistry *QRemoteObjectNode::registry() const

Renvoie un pointeur sur le site QRemoteObjectRegistry du nœud, si le nœud utilise la fonction de registre ; sinon, il renvoie le site nullptr.

[signal] void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)

Ce signal est émis chaque fois qu'un nouvel objet Source est ajouté au registre. Le signal n'est pas émis si le registre n'est pas défini (c'est-à-dire si les sources sont connectées directement via connectToNode ). Le paramètre loc contient des informations sur la source ajoutée, notamment son nom, son type et l'adresse QUrl du nœud hôte.

Voir également remoteObjectRemoved() et instances().

[signal] void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)

Ce signal est émis chaque fois qu'un objet Source connu est supprimé du registre. Le signal n'est pas émis si le registre n'est pas défini (c'est-à-dire si les sources sont connectées directement via connectToNode ). Le paramètre loc contient des informations sur la source supprimée, notamment son nom, son type et l'adresse QUrl du nœud hôte.

Voir également remoteObjectAdded et instances.

[virtual] void QRemoteObjectNode::setName(const QString &name)

Définit name comme nom interne pour ce nœud. Ce nom est ensuite affiché dans le cadre de la journalisation (si elle est activée). Ceci est principalement utile si vous fusionnez les données de journalisation de plusieurs nœuds.

[override virtual protected] void QRemoteObjectNode::timerEvent(QTimerEvent *)

Réimplémente : QObject::timerEvent(QTimerEvent *event).

bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)

Bloque jusqu'à ce que le registre de ce nœud soit initialisé ou que timeout (en millisecondes) expire. Renvoie true si le registre est initialisé avec succès, ou false dans le cas contraire.

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