Bonjour,

Je peine depuis un beau bout de temps à trouver ce qui ne va pas avec un cast d'une classe fille de QObject en Qbject.

Plus en détail, j'ai un classe A qui hérite de QObject et de B. La classe a contient entre autres une map QMap<QString, QPropertyAnimation*> (je la cite car c'est avec elle où ça ne va pas). J'ai connecté le signal de destruction de A à un slot qui tente d'accéder à la map par son getter. Et c'est que ça chauffe : mon cast (avec static_cast) marche (pointeur non NULL) mais la map est inaccessible. Pourquoi ?

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
 
     class B
     {
         ...
     };
 
     class A : public QObject, public B
     {
           Q_OBJECT
 
           public:
                A() : m_propertiesAnimation("prop", new QPropertyAnimation), B()
                {
                }
 
                QMap<QString, QPropertyAnimation*> getPropertiesAnimation()
                {
                       return m_propertiesAnimation;
                }
 
           private:
                   QMap<QString, QPropertyAnimation*> m_propertiesAnimation;  
     };
La connexion du signal de destruction, je l'a fais dans une autre classe C ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
           A * variable_A = new A();
           connect(variable_A, SIGNAL(destroyed(QObject*)),
                this, SLOT(remove(QObject*)), Qt::UniqueConnection);
Le slot dans lequel la map est inaccessible (les autres propriétés de ma classe ne le sont pas par contre) est :
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
 
void C::remove(QObject *ai_item)
{
    A * a0 = qobject_cast<A*>(ai_item);   // CE CAST NE MARCHE PAS => NULL
    if (a0 != NULL)
    {
        qWarning() << a0->getPropertiesAnimation();
    }
 
   A * a1 = static_cast<A*>(ai_item);   // CE CAST MARCHE
    if (NULL != a1)
    {
         qWarning() << a1->getPropertiesAnimation(); // ERREUR de segmentation
    }
}
Merci pour toute aide !