Bonjour à tous,
J'ai une classe perso qui se nomme : Annotation.
Dans mon prog principal, je déclare ceci :
J'ai une fonction qui lit un morceau de fichier XML, me charge une combobox et met les objets dans la liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part QList<Annotation *> liste_annotations;
Ma fonction qui créer l'objet :
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 void MainWindow::chargerCombo(QDomElement annotation,QString leDossier){ Annotation *lannot; QString lenom,source; int i=0,taille=0; while(!annotation.isNull()){ source = annotation.attribute("src",""); lenom = annotation.attribute("name",""); //On créer l'objet Annotation lannot = creerObjetAnnotation(source,leDossier); //On insérer l'annotation dans la liste liste_annotations liste_annotations<<lannot; taille = liste_annotations.length(); //On insère le nom de l'annotation dans la combobox ui->annotations_cb->insertItems(i,QStringList()<<lenom); //On passe à la suivante (NULL s'il n'y a pas de suivant) annotation = annotation.nextSibling().toElement(); //On incrémente le compteur i++; } }
Le problème est que l'insertion dans la liste_annotations se fait mal : en mode débug, tout est bon (les objets existent et sont cohérents). La première insertion se fait bien, taille = 1 et je peux voir l'objet dans la fenêtre des variables.
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 //Fonction qui créer l'objet Annotation Annotation * MainWindow::creerObjetAnnotation(QString source,QString leDossier){ Annotation *mon_annotation = new Annotation(); //Lecture de l'arborescence QDomDocument doc; QFile f(leDossier+source); f.open(QIODevice::ReadOnly); doc.setContent(&f); f.close(); QDomElement root=doc.documentElement(); mon_annotation->setId(root.attribute("acquisitionId","-1").toInt()); QDomElement child = root.firstChild().toElement(); /*Plutôt que d'utiliser un constructeur qui sera illisible en cas de maintenance nous créons l'objet par étapes*/ mon_annotation->setNom(child.attribute("name","Aucun nom")); mon_annotation->setIdPraticien(child.attribute("authorId","-1").toInt()); QDomElement grandchild = child.firstChild().toElement(); mon_annotation->setType(grandchild.attribute("type","aucun type")); mon_annotation->setType_x(grandchild.attribute("x","-1").toInt()); mon_annotation->setType_y(grandchild.attribute("y","-1").toInt()); mon_annotation->setType_w(grandchild.attribute("w","-1").toInt()); mon_annotation->setType_h(grandchild.attribute("h","-1").toInt()); mon_annotation->setR(grandchild.attribute("r","-1").toInt()); mon_annotation->setG(grandchild.attribute("g","-1").toInt()); mon_annotation->setB(grandchild.attribute("b","-1").toInt()); mon_annotation->setAlpha(grandchild.attribute("alpha","-1").toInt()); grandchild = grandchild.nextSibling().toElement(); mon_annotation->setOrigine_x(grandchild.attribute("x","-1").toInt()); mon_annotation->setOrigine_y(grandchild.attribute("y","-1").toInt()); mon_annotation->setOrigine_z(grandchild.attribute("z","-1").toInt()); grandchild = grandchild.nextSibling().toElement(); mon_annotation->setCommentaires(grandchild.text()); return mon_annotation; }
Par contre, pour le 2e objet (il n'y a que 2 objets dans mes tests), l'insertion écrase le premier au lieu de le mettre au bout de la QList : je n'ai donc qu'un seul objet à la fin dans ma liste.
J'ai essayé les méthodes : append, push_back et insert(index, objet) -> d'où mon compteur i. Mais rien n'y fait, toujours le même problème :s
Pouvez vous m'aider ?
Merci d'avance xD
Partager