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 : |
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) |
| 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:
| Constante | Valeur | Description de l'erreur |
|---|---|---|
QRemoteObjectNode::NoError | 0 | Pas d'erreur. |
QRemoteObjectNode::RegistryNotAcquired | 1 | Le registre n'a pas pu être acquis. |
QRemoteObjectNode::RegistryAlreadyHosted | 2 | Le registre est déjà défini et héberge des sources. |
QRemoteObjectNode::NodeIsNoServer | 3 | Le site QRemoteObjectNode 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é faite pour créer un hôte QRemoteObjectNode et se connecter à lui-même en tant que registre. |
QRemoteObjectNode::OperationNotValidOnClientNode | 6 | La tentative d'opération n'est pas valide sur un client QRemoteObjectNode. |
QRemoteObjectNode::SourceNotRegistered | 7 | Le QRemoteObjectSource donné n'est pas enregistré sur ce nœud. |
QRemoteObjectNode::MissingObjectName | 8 | L'adresse QObject donnée n'a pas la valeur objectName() définie. |
QRemoteObjectNode::HostUrlInvalid | 9 | L'url donnée a un schéma invalide ou non reconnu. |
QRemoteObjectNode::ProtocolMismatch | 10 | Le client et le serveur ont des versions de protocole différentes. |
QRemoteObjectNode::ListenFailed | 11 | Impossible d'écouter sur le port hôte spécifié. |
QRemoteObjectNode::SocketAccessError | 12 | Le 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 ®istryAddress) |
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 ®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 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.