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 : |
Types publics
| enum | ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, SocketAccessError } |
| RemoteObjectSchemaHandler |
Propriétés
- heartbeatInterval : int
- persistedStore : QRemoteObjectAbstractPersistedStore*
- registryUrl : QUrl
Fonctions publiques
| 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) |
Signaux
| 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) |
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:
| Constante | Valeur | Description |
|---|---|---|
QRemoteObjectNode::NoError | 0 | Aucune erreur. |
QRemoteObjectNode::RegistryNotAcquired | 1 | Impossible d'accéder au registre. |
QRemoteObjectNode::RegistryAlreadyHosted | 2 | Le registre est déjà défini et héberge des sources. |
QRemoteObjectNode::NodeIsNoServer | 3 | L'QRemoteObjectNode indiquée n'est pas un nœud hôte. |
QRemoteObjectNode::ServerAlreadyCreated | 4 | Le nœud hôte a déjà été initialisé. |
QRemoteObjectNode::UnintendedRegistryHosting | 5 | Une tentative a été effectuée pour créer une QRemoteObjectNode hôte et se connecter à elle-même en tant que registre. |
QRemoteObjectNode::OperationNotValidOnClientNode | 6 | L'opération tentée n'est pas valide sur une QRemoteObjectNode client. |
QRemoteObjectNode::SourceNotRegistered | 7 | Le QRemoteObjectSource indiqué n'est pas enregistré sur ce nœud. |
QRemoteObjectNode::MissingObjectName | 8 | L'QObject spécifié ne dispose pas de la propriété objectName(). |
QRemoteObjectNode::HostUrlInvalid | 9 | L'URL fournie possède un schéma non valide ou non reconnu. |
QRemoteObjectNode::ProtocolMismatch | 10 | Le client et le serveur utilisent des versions de protocole différentes. |
QRemoteObjectNode::ListenFailed | 11 | Impossible d’écouter sur le port de l’hôte spécifié. |
QRemoteObjectNode::SocketAccessError | 12 | Le 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 ®istryAddress) |
Signal de notification :
| void | registryUrlChanged(const QUrl ®istryUrl) |
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 ®istryAddress, 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 ®istryUrl)
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.