Sur cette page

QRemoteObjectNode Class

Un nœud sur un réseau « Qt Remote Objects ». En savoir plus…

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 de : 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)
(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)

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 vers un réseau QtRemoteObjects. Un réseau peut être aussi simple que deux nœuds, ou constituer un ensemble arbitrairement complexe de processus et de périphériques.

Un QRemoteObjectNode ne dispose pas d’URL à laquelle d’autres nœuds peuvent se connecter ; il ne peut donc acquérir que des répliques. Il ne peut pas partager d’objets source (seuls les nœuds de type QRemoteObjectHost et QRemoteObjectRegistryHost peuvent le faire).

Les nœuds peuvent se connecter directement les uns aux autres à l’aide de ` connectToNode`, ou ils peuvent utiliser ` QRemoteObjectRegistry ` pour simplifier les connexions.

Le « QRemoteObjectRegistry » est une réplique spéciale accessible à tous les nœuds qui se connectent à l’URL du registre. Il sait comment se connecter à chaque objet « QRemoteObjectSource » du 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 de l'QRemoteObjectNode:

ConstanteValeurDescription
QRemoteObjectNode::NoError0Aucune erreur.
QRemoteObjectNode::RegistryNotAcquired1Impossible d'accéder au registre.
QRemoteObjectNode::RegistryAlreadyHosted2Le registre est déjà défini et héberge des sources.
QRemoteObjectNode::NodeIsNoServer3L'QRemoteObjectNode indiquée n'est pas un nœud hôte.
QRemoteObjectNode::ServerAlreadyCreated4Le nœud hôte a déjà été initialisé.
QRemoteObjectNode::UnintendedRegistryHosting5Une tentative a été effectuée pour créer une QRemoteObjectNode hôte et se connecter à elle-même en tant que registre.
QRemoteObjectNode::OperationNotValidOnClientNode6L'opération tentée n'est pas valide sur une QRemoteObjectNode client.
QRemoteObjectNode::SourceNotRegistered7Le QRemoteObjectSource indiqué n'est pas enregistré sur ce nœud.
QRemoteObjectNode::MissingObjectName8L'QObject spécifié ne dispose pas de la propriété objectName().
QRemoteObjectNode::HostUrlInvalid9L'URL fournie possède un schéma non valide ou non reconnu.
QRemoteObjectNode::ProtocolMismatch10Le client et le serveur utilisent des versions de protocole différentes.
QRemoteObjectNode::ListenFailed11Impossible d’écouter sur le port de l’hôte spécifié.
QRemoteObjectNode::SocketAccessError12Le client n'est pas autorisé à se connecter au serveur. Assurez-vous que l'QRemoteObjectHost::setLocalServerOptions est correctement défini.

QRemoteObjectNode::RemoteObjectSchemaHandler

Définition de type (typedef) pour une méthode std::function pouvant prendre en entrée un objet ` QUrl ` et chargée de créer le canal de communication entre ce nœud et le nœud hébergeant la source souhaitée. Comme certains types de QIODevices (par exemple, QSslSocket) nécessitent des étapes supplémentaires avant que le périphérique ne soit prêt à l'emploi, la méthode est chargée d'appeler addClientSideConnection une fois la connexion entièrement établie.

Documentation des propriétés

heartbeatInterval : int

Intervalle de pulsation en ms.

Le signal de vie (utile uniquement pour les connexions par socket) envoie périodiquement un message aux nœuds connectés afin de détecter si la connexion a été interrompue. Qt Remote Objects tentera de se reconnecter automatiquement s’il détecte une perte de connexion. Cette fonction peut faciliter cette détection, car le client ne détectera l’indisponibilité du serveur que lorsqu’il tentera d’envoyer des données.

Une valeur de 0 (valeur par défaut) désactivera le signal de pulsation.

Fonctions d’accès :

int heartbeatInterval() const
void setHeartbeatInterval(int interval)

Signal de notification :

void heartbeatIntervalChanged(int heartbeatInterval)

persistedStore : QRemoteObjectAbstractPersistedStore*

Permet de configurer une instance de « QRemoteObjectAbstractPersistedStore » pour le nœud.

Permet aux membres PROP de la réplique dotés du trait PERSISTED d'enregistrer leur valeur actuelle lorsque la réplique est supprimée et de restaurer une valeur stockée lors du prochain démarrage de la réplique.

Nécessite l’implémentation d’une 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)

Signal de notification :

void persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore)

registryUrl : QUrl

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

Il s'agit d'une QUrl vide s'il n'y a pas de registre utilisé.

Fonctions d'accès :

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

Signal de notification :

void registryUrlChanged(const QUrl &registryUrl)

Documentation des fonctions membres

QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)

Constructeur par défaut pour QRemoteObjectNode avec l'parent donné. 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, à moins que celui-ci ne soit 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 et la connexion à d’autres nœuds (hôtes) sont gérées par l’ QRemoteObjectRegistry, tel que spécifié par registryAddress.

Voir également connectToNode, setRegistryUrl, QRemoteObjectHost et QRemoteObjectRegistryHost.

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

Renvoie un pointeur vers une réplique de type `ObjectType` (qui est un paramètre de modèle et doit hériter de ` QRemoteObjectReplica`). Autrement dit, le paramètre de modèle doit être un type généré par repc. Le paramètre ` name ` peut être utilisé pour spécifier l'name e attribuée à l'objet lors de l'appel à ` QRemoteObjectHost::enableRemoting()`.

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

Renvoie un objet « QRemoteObjectDynamicReplica » de l'name «Source».

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

Renvoie un pointeur vers une réplique dérivée spécifiquement de QAbstractItemModel. L'name fournie doit correspondre au nom utilisé avec l'enableRemoting correspondant qui a mis le modèle sur le réseau. action spécifie si le modèle doit récupérer des données avant l'émission du signal initialized. S'il est défini sur QtRemoteObjects::PrefetchData, les données relatives aux rôles de l'rolesHint seront préchargées. Si rolesHint est vide, les données de tous les rôles exposés par Source seront préchargées.

Le modèle renvoyé sera vide jusqu’à ce qu’il soit initialisé avec Source.

void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)

Pour pouvoir utiliser la fonction ` QRemoteObjectNode::acquire()` sur des objets `Replica` via des périphériques QIODevices externes, ` Qt Remote Objects ` doit avoir accès au canal de communication (un ` QIODevice`) entre les nœuds concernés. C’est l’appel à la fonction `addClientSideConnection()` qui permet cela, en prenant l’objet ` ioDevice ` en paramètre. Tout appel à ` acquire()` effectué sans appeler `addClientSideConnection` fonctionnera tout de même, mais le nœud ne pourra pas initialiser la réplique sans que la connexion au nœud hôte lui soit fournie.

Voir également QRemoteObjectHostBase::addHostSideConnection.

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

Permet de connecter un nœud client au nœud hôte à l'adresse address.

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

Une fois qu’un client est connecté à un hôte, des répliques valides peuvent alors être obtenues si la source correspondante est accessible à distance.

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

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

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

Cette fonction de modèle (qui prend un type généré par repc comme paramètre de modèle) renvoie la liste des noms de toutes les instances de ce type sur le réseau Remote Objects. Par exemple, si vous avez défini une classe `Shape` 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 Remote Objects à l'aide de ` enableRemoting`.

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

La fonction `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 avec modèle, mais prend le nom de la classe Source comme paramètre (typeName) au lieu de le dériver du type de classe.

Cette fonction surcharge la méthode QRemoteObjectNode::instances().

QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const

Renvoie le dernier ensemble d'erreurs.

[signal, since 6.12] void QRemoteObjectNode::persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore)

Ce signal est émis lorsque la propriété « persistedStore » passe à la valeur « persistedStore ».

Remarque : signalde notification pour la propriété « persistedStore ».

Cette fonction a été introduite dans Qt 6.12.

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

Fournir une méthode personnalisée pour gérer les schémas fournis en externe

Cette méthode est liée au registre et aux schémas externes. En enregistrant un gestionnaire de type std::function pour un schéma externe, la méthode enregistrée sera appelée lorsque le registre sera informé 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 détectera un objet Source sur un nouveau nœud (non encore connecté) dont le {QUrl::schema()} est schema. L’ handler, de type QRemoteObjectNode::RemoteObjectSchemaHandler, recevra en paramètre d’entrée l’ QUrl du nœud fournissant la source et sera chargé d’établir le canal de communication (une sorte de QIODevice ) et d’appeler addClientSideConnection avec celui-ci.

Voir également RemoteObjectSchemaHandler.

const QRemoteObjectRegistry *QRemoteObjectNode::registry() const

Renvoie un pointeur vers l'QRemoteObjectRegistry du nœud, si celui-ci utilise la fonctionnalité Registry ; sinon, il renvoie nullptr.

[signal, since 6.12] void QRemoteObjectNode::registryUrlChanged(const QUrl &registryUrl)

Ce signal est émis lorsque la propriété « registryUrl » passe à la valeur « registryUrl ».

Remarque : signalde notification pour la propriété « registryUrl ».

Cette fonction a été introduite dans Qt 6.12.

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

Ce signal est émis chaque fois qu’un nouvel objet Source est ajouté au registre. Le signal ne sera pas émis s’il n’y a pas de registre défini (c’est-à-dire pour les sources via des connexions établies directement via connectToNode ). Le paramètre loc contient les informations relatives à la Source ajoutée, notamment son nom, son type et l’ 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 ne sera pas émis s'il n'y a pas de registre défini (c'est-à-dire pour les Sources établies via des connexions directes à l'adresse connectToNode ). Le paramètre loc contient les informations relatives à la Source supprimée, notamment son nom, son type et l'QUrl du nœud hébergeant celle-ci.

Voir également remoteObjectAdded et instances.

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

Définit « name » comme nom interne de ce nœud. Ce nom apparaît ensuite dans les journaux (si cette fonctionnalité est activée). Cette option est particulièrement utile lorsque vous fusionnez les données de journalisation provenant 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 le délai d’ timeout ation (en millisecondes) expire. Renvoie true si le registre a été initialisé avec succès au moment du retour, 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.