Exemple 2 : Connexion directe à une réplique dynamique
Aucune modification n'est nécessaire côté source, car une réplique dynamique n'a d'incidence que sur la manière dont le nœud demandeur accède à la réplique. Nous utilisons donc le code côté source présenté dans l'exemple 1.
- Ajoutez la génération de réplique au projet.
La réplique étant acquise de manière dynamique, aucun fichier d'
.repation n'est nécessaire, contrairement à l'exemple 1. - Créez le nœud distant et connectez-le au nœud hôte source.
Le code correspondant à cette étape est identique à celui de l’exemple 1.
QRemoteObjectNode repNode; // create remote object node repNode.connectToNode(QUrl(QStringLiteral("local:replica"))); // connect with remote host node - Obtenez une réplique de l’objet source distant.
Dans
main.cpp, nous utilisons un objet « QSharedPointer » pour contenir une réplique de l’objet distant, puis nous instancions un objet « replica requestor » :#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 de 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
};
#endifdynamicclient.cpp
#include "dynamicclient.h"
// constructeur
DynamicClient::DynamicClient(QSharedPointer<QRemoteObjectDynamicReplica> ptr)
: QObject(nullptr), clientSwitchState(false), reptr(ptr)
{
// Signal de connexion pour la modification de l’état de validité de la réplique, initialisé avec le slot de signal
QObject::connect(reptr.data(), &QRemoteObjectDynamicReplica::initialized, this,
&DynamicClient::initConnection_slot);
}
// Fonction permettant d’initialiser les connexions entre les slots et les signaux
void DynamicClient::initConnection_slot()
{
// Connecte le signal de la réplique source currStateChanged() au slot
// recSwitchState() du client afin de 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 au
// 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 récupérer « currState » depuis la source :
clientSwitchState = reptr->property("currState").toBool();
qDebug() << "Received source state " << value << clientSwitchState;
// Émettre un signal pour renvoyer l'état reçu au serveur :
Q_EMIT echoSwitchState(clientSwitchState);
}Lorsqu’il est exécuté conjointement avec 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.