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 ?
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
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; };
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 A * variable_A = new A(); connect(variable_A, SIGNAL(destroyed(QObject*)), this, SLOT(remove(QObject*)), Qt::UniqueConnection);
Merci pour toute aide !
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 } }
Partager