Merci encore koala01 pour tes précieux conseils
Voici ma nouvelle proposition :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class QNetworkFacade { public : QNetworkFacade(); ~QNetworkFacade(); bool Listen() const; private : QNetworkConfig* m_config; QUdpServer* m_udpServer; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 QNetworkFacade::QNetworkFacade() : m_config(new QNetworkConfig()) , m_udpServer(new QUdpServer()) { m_config->load(CFG_NETWORK); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 bool QNetworkFacade::Listen() const { if (!m_udpServer) return false; return m_udpServer->bind(QHostAddress::LocalHost, m_config->m_port); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class QUdpServer : public QObject { Q_OBJECT public : QUdpServer(QObject* parent = 0); ~QUdpServer(); bool bind(const QHostAddress&, const quint16) const; private slots : void readData(); private : void initConnections() const; private : QUdpSocket* m_socket; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class QModuleConfig { public : virtual ~QModuleConfig(); virtual bool load(const QString&) = 0; protected : bool loadDom(const QString&); template <typename T> bool getParam(const QString& key, T& value) { // Get param from dom and return error code } protected : QDomDocument* m_dom; }; template<> bool QModuleConfig::getParam<ushort>(const QString&, ushort&);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class QNetworkConfig : public QModuleConfig { friend class QNetworkFacade; public : QNetworkConfig(); protected : bool load(const QString&); private : quint16 m_port; };J'ai toutefois un problème au niveau de mon objet QAppli. Quand je vais appeler Listen, je voudrais par exemple récupérer le buffer pour le décoder et construire un modèle qui sera utilisé par l'IHM..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 const QString CFG_PARAM_PORT = "Port"; const quint16 CFG_PARAM_PORT_DEFAULT = 5000; QNetworkConfig::QNetworkConfig() : QModuleConfig() , m_port(CFG_PARAM_PORT_DEFAULT) {} bool QNetworkConfig::load(const QString& file) { if (!loadDom(file)) return false; getParam<ushort>(CFG_PARAM_PORT, m_port); return true; }
Je vais donc avoir un autre module Graphic, et un module pour décoder et construire mon modèle. Il faudrait donc que je créé un point d'entrée dans le module Network comme un pointeur de fonction en argument de la méthode Listen pour appeler la callback au moment voulu ?
J'imagine qu'il faudra procéder de la sorte aussi entre le modèle et la vue, à savoir, passer éventuellement des callbacks ou des pointeurs pour les connecter ?
Autre problème, dans ma spécialisation de template pour la méthode getParam dans QModuleConfig, je vois via l'intellisense que ma méthode getParam est publique (car spécialisation publique même si la méthode générique est censée être protégée). Est-ce normal ?
Merci
Partager