Exemple 2 : Connexion directe avec un réplica dynamique
Il n'y a pas de changement à faire du côté de la source, car une réplique dynamique n'a d'impact que sur la façon dont le nœud demandeur acquiert la réplique. Nous utilisons donc le code côté source présenté dans l'exemple 1.
- Ajouter la génération de répliques au projet.
Comme la réplique est acquise dynamiquement, aucun fichier
.repn'est nécessaire, contrairement à l'exemple 1. - Créer le nœud distant et le connecter au nœud hôte source.
Le code de cette étape est inchangé par rapport à l'exemple 1.
QRemoteObjectNode repNode; // create remote object node repNode.connectToNode(QUrl(QStringLiteral("local:replica"))); // connect with remote host node
- Acquérir une réplique de l'objet source distant.
Dans
main.cpp, nous utilisons un QSharedPointer pour contenir une réplique de l'objet distant, puis nous instancions un objet demandeur de réplique :#include <QCoreApplication> #include "dynamicclient.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSharedPointer<QRemoteObjectDynamicReplica> ptr; // shared pointer to hold replica QRemoteObjectNode repNode; repNode.connectToNode(QUrl(QStringLiteral("local:replica"))); ptr.reset(repNode.acquireDynamic("SimpleSwitch")); // acquire replica of source from host node DynamicClient rswitch(ptr); // create client switch object and pass replica reference to it return a.exec(); }
La déclaration et la définition complètes de la classe du demandeur, DynamicClient, sont les suivantes :
dynamicclient.h
#ifndef _DYNAMICCLIENT_H #define _DYNAMICCLIENT_H #include <QObject> #include <QSharedPointer> #include <QRemoteObjectNode> #include <qremoteobjectdynamicreplica.h> class DynamicClient : public QObject { Q_OBJECT public: DynamicClient(QSharedPointer<QRemoteObjectDynamicReplica> ptr); ~DynamicClient() override = default; Q_SIGNALS: void echoSwitchState(bool switchState);// this signal is connected with server_slot(..) slot of source object and echoes back switch state received from source public Q_SLOTS: void recSwitchState_slot(bool); // Slot to receive source state void initConnection_slot(); // Slot to connect signals/slot on replica initialization private: bool clientSwitchState; // holds received server switch state QSharedPointer<QRemoteObjectDynamicReplica> reptr;// holds reference to replica }; #endif
dynamicclient.cpp
#include "dynamicclient.h"// constructeurDynamicClient::DynamicClient(QSharedPointer<QRemoteObjectDynamicReplica> ptr) : QObject(nullptr), clientSwitchState(false), reptr(ptr) { //signal de connexion pour la réplique valide changé avec l'initialisation du slot de signal QObject::connect(reptr.data(), &QRemoteObjectDynamicReplica::initialized, this, &DynamicClient::initConnection_slot) ; }// Fonction d'initialisation des connexions entre les slots et les signauxvoid DynamicClient::initConnection_slot() { // Connecter le signal currStateChanged() de la réplique source avec le slot // recSwitchState() du client pour recevoir l'état actuel de la source: QObject::connect(reptr.data(), SIGNAL(currStateChanged(bool)), this,SLOT(recSwitchState_slot(bool))) ; // Connecter le signal echoSwitchState(..) du client avec le slot // server_slot(..) de la réplique pour renvoyer l'état reçu :QObject::connect(this, SIGNAL(echoSwitchState(bool)), reptr.data(), SLOT(server_slot(bool)) ; }void DynamicClient::recSwitchState_slot(bool value) { // Utiliser la propriété de la réplique pour obtenir "currState" de la source :clientSwitchState = reptr->property("currState").toBool() ; qDebug() << "Received source state " << value << clientSwitchState; // Émission d'un signal pour renvoyer l'état reçu au serveur :Q_EMIT echoSwitchState(clientSwitchState) ; }
Lorsqu'il est exécuté en même temps que l'exemple côté source, le résultat est identique à celui de l'exemple 1.
© 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.