2011-02-08 3 views
0

Je crée une QList d'une classe personnalisée appelée ControlIcon. Je crée les ControlIcons et les charge avec des variables membres, puis les ajoute à la liste. Voici le code append:Les objets ajoutés à QList perdent toutes leurs données de membre

this->cueList.append(firstOne);

est ici la déclaration du QList:

QList< ControlIcon *> cueList;

Si je casse juste après l'append, je peux voir que le ControlIcon qui vient d'être ajouté est pleine des membres, et semble bien. Je regarde dans la liste, et le ControlIcon qui a été ajouté (et il ajoute un ControlIcon) n'a aucun membre du tout. J'ai déjà fait une QList d'objets personnalisés, donc je suis très confus. Quelqu'un pourrait-il aider?

+1

Veuillez indiquer le code où firstOne est créé et détruit. –

+0

Donc, pour certaines raisons, vous avez deux pointeurs différents (firstOne et celui stocké dans QList)? firstOne fonctionne toujours, alors l'élément de la liste pointe vers une adresse différente? –

+0

Comment "regardez-vous" dans la liste? Si vous utilisez Creator pour le débogage, il peut être difficile d'afficher les membres de votre classe dans un conteneur. Je cours dans ce moment avec la version Mac de Creator. –

Répondre

0

J'ai changé le type de données de la liste en SerialController (l'enfant de ControlIcon), ce que j'essayais d'ajouter, et ça marche bien. C'est vraiment énervant, car il y a d'autres types de contrôleurs, mais je suppose que ça va marcher pour le moment.

0

Votre classe personnalisée doit être assignable, ce qui signifie qu'elle doit fournir un constructeur par défaut, un constructeur de copie et un opérateur d'affectation. Si ce n'est pas le cas, des choses étranges comme celle-ci peuvent arriver.

+0

Sa liste contient des pointeurs, qui sont assignables. –

0

cueList contient des pointeurs vers des objets ControlIcon, mais il n'est pas responsable de la création ou de la conservation de ces objets ControlIcon. Comment avez-vous obtenu le pointeur firstOne? S'il pointe vers quelque chose sur la pile, cet objet serait invalide lorsque vous essayerez de l'utiliser plus tard. S'il a été créé avec new, il restera valide jusqu'à ce que vous le nettoyiez en utilisant delete.

+0

"SerialController * firstOne = new SerialController" est ce que j'ai utilisé pour créer l'icône de contrôle (SerialController est une classe enfant de ControlIcon). – CoutPotato

Questions connexes