Bonjour,

j'ai un fichier XML comme ceci :
Code xml : 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
<Villes>
	<Zones>
		<nomZone>TOULOUSE</nomZone>
		<coordXZone>360</coordXZone>
		<coordYZone>650</coordYZone>
		<villesZone>
			<nom>Toulouse</nom>
			<nomExec>""</nomExec>
		</villesZone>
		<villesZone>
			<nom>test</nom>
			<nomExec>""</nomExec>
		</villesZone>
	</Zones>
	<Zones>
		<nomZone>LYON</nomZone>
		<coordXZone>560</coordXZone>
		<coordYZone>460</coordYZone>
		<villesZone>
			<nom>LYON</nom>
			<nomExec>""</nomExec>
		</villesZone>
		<villesZone>
			<nom>test2</nom>
			<nomExec>""</nomExec>
		</villesZone>
	</Zones>
 </Villes>

Je lit mon fichier XML afin de placer une zone sur une carte. J'aimerais que dans chaque zone la liste des villes lui soit associées mais le problème que j'ai c'est que dans ma liste des zones ils récupère toutes les villes .. il ne les associe pas à une zone précise.. ça doit être une erreur toute simple mais je suis bloquée

voici mon code :
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
void Carte::Configration()
{
 
    QString str_NomZone , str_CoordxZone,str_CoordyZone , str_NomVilleZone , str_ExecVilleZone;
    QStringList strl_listeVilleZone;
 
 
    QDomDocument doc;
 
    // ouverture du fichier xml en fonction du choix projet
    QFile file("/proj.xml");
    file.open(QIODevice::ReadOnly);
    doc.setContent(&file);
 
    QDomElement racine = doc.documentElement();
    racine = racine.firstChildElement();
 
    //Boucle permettant la navigation dans le fichier XML
    while(!racine.isNull())
    {
        if(racine.tagName() == "Zones")
        {
 
            QDomElement unElement = racine.firstChildElement();
            while(!unElement.isNull())
            {
                // Si l'enfant de l'élément Zones est l'élément <nomZone>
                if(unElement.tagName() == "nomZone")
                {
                    // On récupère le texte contenu dans la balise <nom>
                    str_NomZone = unElement.text();
 
                }
                // Si l'enfant de l'élément <Zones> est <coordXZone>
                if(unElement.tagName() == "coordXZone")
                {
                    // On récupère le texte contenu dans la balise <coordXZone>
                    str_CoordxZone = unElement.text();
                }
                // Si l'enfant de l'élément <Zones> est <coordYZone>
                if(unElement.tagName() == "coordYZone")
                {
                    // On récupère le texte contenu dans la balise <coordYZone>
                    str_CoordyZone = unElement.text();
                }
                // Si on pointe sur un élément de type <villesZones> dans la partie <Zones>
                if(unElement.tagName() == "villesZone")
                {
 
                    QDomElement unElementVilleZone = unElement.firstChildElement();
 
                    // On parcourt tous les enfants de l'élément <villesZones>
                    while(!unElementVilleZone.isNull())
                    {
                        // Si l'enfant de l'élément site est l'élément <nom>
                        if(unElementVilleZone.tagName() == "nom")
                        {
                            // On récupère le texte contenu dans la balise <nom>
                            str_NomVilleZone = unElementVilleZone.text();
                            //placement de chaque ville de la zone dans une liste
                            strl_listeVilleZone.append(str_NomVilleZone);
 
                            set_ListeVilles_str(strl_listeVilleZone);
                        }
                        // Si l'enfant de l'élément <villeszone> est <exec>
                        else if(unElementVilleZone.tagName() == "execZone")
                        {
                            // On récupère le texte contenu dans la balise <exec>
                            str_ExecVilleZone = unElementVilleZone.text();
 
                        }
                      unElementVilleZone = unElementVilleZone.nextSiblingElement();
                }
 
                }
 
                // Permet d'aller au prochain enfant de <villesZones> et de poursuivre la boucle
 
                unElement = unElement.nextSiblingElement();
 
 
            }
 
 
            // création d'une Zone contenant plusieurs villes sur la carte
            btn_Zone= new QPushButton(this);
            btn_Zone->resize(m_largBtnZone,m_hautBtnZone);
            btn_Zone->setText(str_NomZone);
            btn_Zone->setToolTip(str_NomZone);
            btn_Zone->move(str_CoordxZone.toInt(),str_CoordyZone.toInt());
           // set_ListeVilles_str(strl_listeVilleZone);
            QObject::connect(btn_Zone, SIGNAL(clicked()), this, SLOT(afficher_ListeVilles()));
 
 
        }
 
        // On va à l'élément fils de <root> suivant
        racine = racine.nextSiblingElement();
 
    }
 
    file.close();
}
la fonction qui permet de cliquer sur une zone
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
void Carte::afficher_ListeVilles(){
    bool existanceZone_bl;
    QString itemListeZones_str = QInputDialog::getItem(this, tr("Liste des sites"),
                                       tr("Sites de la Zone"), get_ListeVilles_str(), 0, false, &existanceZone_bl);
    if (existanceZone_bl && !itemListeZones_str.isEmpty()){
        QMessageBox::information(this, "Choix de la ville appartenant à une zone", "La ville choisie est : "+itemListeZones_str);
        // permet de lancer l'executable associé à la ville
        lectureZone(itemListeZones_str);
    }  
}
Je pense que le problème viens de ma fonction afficher_ListeVilles ..

Merci pour votre aide