Bonjour tout le monde, je me retrouve confrontée à un problème que je ne saurais expliquer.

Je suis en plein développement sous Qt.

Contexte:
J'ai trois classes les unes imbriqués dans les autres.
La classes A contient la classe B qui contient la classe C. Les classes B et C sont dans la DLL que je développe et la classe A et dans un projet afin de tester ma DLL.

Souhait: je génère un signal depuis ma classe C qui est reçu par un slot (classeCDisconneted) de la classe B. // ça, ça marche

Problème: lors que je génère un signal de la classe B pour qu'il soit reçu par un slot de la classe A, ça commence à se compliquer.
Si je génère mon signal dans une fonction ("create")de la classe B, tout se passe bien. Si je génère le signal dans le slot (classeCDisconneted) activé par le signal venant de la classe C, alors le slot de la classe A n'est pas activé.



Voici le code:

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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
code du projet de test:
 
main.cpp
 
#include<QCoreApplication>
#include"C:\Users\company\Documents\repref\QTWorkspace\SharedFiles\classeB.h"
#include"C:\Users\company\Documents\repref\QTWorkspace\SharedFiles\classeC.h"
#include<QDebug>
#include"classeA.h"
 
int main(intargc,char*argv[])
{
 
QCoreApplicationa(argc,argv);
 
 
classeB B = classeB();
classeA A(&B);
 
 
return a.exec();
}
 
 
classeA.h
 
#ifndef CLASSEA_H
#define CLASSEA_H
 
#include <windows.h>
#include <QObject>
#include "C:\Users\company\Documents\repref\QTWorkspace\SharedFiles\classeB.h"
#include "C:\Users\company\Documents\repref\QTWorkspace\SharedFiles\classeC.h"
 
   class classeA: public QObject
{
   Q_OBJECT
public:
   classeA(classeB* classeBTemp,QObject* parent = 0);
   classeB* B;
 
private:
   HANDLE m_classeA;
   static DWORD WINAPI threadA(LPVOIDparam);
 
 
public slots:
   void disconnected();
 
};
 
#endif//CLASSEA_H
ClasseA.cpp
 
#include "classeA.h"
 
 
ClasseA::classeA(ClasseB* classeBTemp,QObject* parent):B(classeBTemp),QObject(parent)
{
 
   m_classeA = 0;
   m_classeA = CreateThread(NULL,0,&classeA::threadA,(void*)this,0,NULL);
 
   connect(B,SIGNAL(disconnected()),this,SLOT(disconnected()));
 
}
 
DWORD WINAPI classeA::threadA(LPVOIDparam){
 
// code interne permettant d'appeler des fonctions
 
}
 
void classeA::disconnected(){
 
   qDebug()<<"deconnexion slot classe A";
}
 
 
Code de la DLL:
ClasseB.h
 
#ifndef CLASSEB_H
#define CLASSEB_H
 
#include "C:\Users\company\Documents\repref\QTWorkspace\SharedFiles\classeB_global.h"
#include "C:\Users\company\Documents\repref\QTWorkspace\SharedFiles\classeC.h"
#include <QDebug>
 
using namespace std;
 
class CLASSEBSHARED_EXPORT classeB: public QObject
{
   Q_OBJECT
 
public:
   classeB(QObject* parent = 0);
   classeB(const classeB& temp,QObject* parent = 0);
   ~classeB();
   bool create();
 
 
public slots:
   bool classeCDisconnected();
 
 
signals:
   void disconnected();
 
private:
   //communicationprotocoleclass
   classeC*C;
 
};
 
#endif//CLASSEB_H
 
 
classeB.cpp
 
#include "C:\Users\company\Documents\repref\QTWorkspace\SharedFiles\classeB.h"
 
using namespace std;
 
classeB::classeB(QObject *parent):QObject(parent)
{
    connect(C,SIGNAL(disconnected()),this,SLOT(classeCDisconnected()));
}
 
classeB::classeB(const classeB &temp, QObject *parent):QObject(parent)
{
    C = temp.C;
}
 
classeB::~classeB(){
    delete C;
}
 
 
//  create function
bool classeB::create(){
 
    emit disconnected();
 }
 
 
bool classeB::classeCDisconnected(){
 
    emit disconnected();
    qDebug() << "deconnexion classeB";
}





Merci d'avance pour votre aide