Échec de cast d'une classe fille de QObject en QObject
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:
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:
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:
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 !