Bonjour à tous,

Comme l'indique le titre, j'envoi des images par requêtes HTTP mais je suis confronté à un problème que je n'arrive pas à localiser, le fameux Index Out Of Range.
Sans plus attendre voici le code :


FenPrincipale.cpp :: envoyerCollection()
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
104
105
 
/*Voilà le slot qui sera chargé d'envoyer les images sur le serveur*/
void FenPrincipale::envoyerCollection()
{
    envoyer->setEnabled(false);                 //Des boutons que je 'grise' pendant que les requêtes sont effectués
    rafraichir->setEnabled(false);
 
 
    /*On commence par vérifier que le tableau n'est PAS vide*/
    if (tabOrdi.isEmpty())                        //Ce tableau contient toutes les images et collections (ou dossier) présent sur l'ordinateur. Il s'agit en faite d'une Structure
    {
        this->dernierGet();                      //Ce slot fais une requête GET puis appelle une méthode qui rafraîchit l'affichage de la fenêtre
        return;
    }
 
    /*On vérifie aussi si l'indexOrdi n'est pas déjà plus petit que 0*/
    if (indexOrdi < 0)                         //L'indexOrdi est initialisé dans une méthode précédente, j'ai fais : indexOrdi=tabOrdi.size()-1 et je décrémente au fur et à mesure
    {
        this->dernierGet();
    }
 
 
    /*Maintenant, il nous faut envoyer nos collections (ou dossier), en commençant par celles qui sont VIDES*/
    else if (tabOrdi[indexOrdi]->fichiers.isEmpty())
    {
        //On post notre collection (vide)
        requete->requetePostCollection(tabOrdi[indexOrdi]->nomCollection);
 
        //On décrémente notre variable
        indexOrdi--;
        //Si après ce post le tableau est vide, on fais un dernierGet
        if (indexOrdi <0)
         {
            bool disco=QObject::disconnect(requete, 0,0,0);                                                 //Je suis obliger de déconnecter à chaque fois ma précédente connexion à l'objet requête pour éviter les conflits
            if (disco)
                QObject::connect(requete, SIGNAL(finis()), this, SLOT(dernierGet()));                //Dans mon objet Requête, j'émet un signal finis() lorsque la requête est terminer et que j'ai finis de traiter les données
            else
            {
                QMessageBox::warning(this, "Erreur", "Erreur de type déconnexion signaux/slots (FenPrincipale 00)");
                return;
            }
 
        }
 
        //Sinon on reviens dans le slot envoyerCollection()
        else
        {
            bool disco=QObject::disconnect(requete, 0, 0, 0);
            if (disco)
                QObject::connect(requete, SIGNAL(finis()), this, SLOT(envoyerCollection()));
            else
            {
                QMessageBox::warning(this, "Erreur", "Erreur de type déconnexion signaux/slots (FenPrincipale 01)");
                return;
            }
        }
    }
 
    //Maintenant si il y a des fichiers dans la collection...
    else
    {
        //Il nous faut vérifier si nous avons déjà l'inputOid (autrement dit si la collection a déjà été envoyé ou pas). Note: L'inputOid est en faite un lien, c'est dans ce lien que l'on va poster nos images afin qu'elles soit rattachées à la collection
        if (tabOrdi[indexOrdi]->inputOid.isEmpty())
        {
            //Si il ne le sont pas....
            //On va poster tout dabord la collection...
            requete->requetePostCollection(tabOrdi[indexOrdi]->nomCollection);
 
            bool disco=QObject::disconnect(requete, 0, 0, 0);
            if (disco)
                QObject::connect(requete, SIGNAL(finis()), this, SLOT(getMAJ()));                      //Ce slot va faire une requête GET qui me retournera un fichier CSV avec les informations dont j'ai besoin (en l’occurrence les inputOid)
 
            else
            {
                QMessageBox::warning(this, "Erreur", "Erreur de type déconnexion signaux/slots (FenPrincipale 02)");
                return;
            }
        }
 
 
        //Si ils sont initialisés et que nous avons l'inputOid...Je pense que c'est à ce niveau là qu'il y a le problème
        else
        {
            //Il ne nous reste qu'à envoyer les images
 
            indexImage=tabOrdi[indexOrdi]->fichiers.size()-1;
            this->envoyerImage();
 
            QObject::connect(this, SIGNAL(terminer()), this, SLOT(decrementer()));             //Ce slot sert uniquement à décrémenter l'indexOrdi.
 
            if (indexOrdi<0)
            {
                bool disco=QObject::disconnect(requete, 0, 0, 0);
                if (disco)
                    QObject::connect(requete, SIGNAL(finis()), this, SLOT(dernierGet()));
                else
                {
                    QMessageBox::warning(this, "Erreur", "Erreur de type déconnexion signaux/slots (FenPrincipale 03)");
                    return;
                }
            }
        }
 
    }
}
FenPrincipale.cpp :: envoyerImage()
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
 
/*Slot qui servira a envoyer UNIQUEMENT les images sur le serveur*/
void FenPrincipale::envoyerImage()
{
    requete->requetePostImage(tabOrdi[indexOrdi]->fichiers[indexImage], tabOrdi[indexOrdi]->inputOid);
    indexImage--;
 
    //Si toutes les images ont été envoyés on dis qu'on a finis
    if (indexImage<0)
    {
        emit terminer();
    }
 
   //Sinon, on revient dans ce slot pour faire la suite
    else
    {
        bool disco=QObject::disconnect(requete, 0, 0, 0);
        if (disco)
            QObject::connect(requete, SIGNAL(finis()), this, SLOT(envoyerImage()));
        else
        {
            QMessageBox::warning(this, "Erreur", "Erreur de type déconnexion signaux/slots (FenPrincipale 06)");
            return;
        }
 
    }
}
Maintenant j'aimerais vous donner plus de détail concernant le problème, en gros l'erreur n'apparaît pas à chaque fois. En faite elle apparaît UNIQUEMENT lorsque la DERNIÈRE collection que j'envoi contient des images....Je sais pas si vous voyez ce que je veux dire .
Par exemple disons que j'ai deux collections (A et B), vu que j'envoi le tout à l'envers B sera envoyé en premier et A en second. Si B contient des images mais pas A je n'aurai pas d'erreur, en revanche si A contient des images le programme plantera.
Je pense que l'erreur est toute bête, mais pourtant ça fais plusieurs jours que je suis dessus et je n'arrive vraiment pas à mettre le doigt dessus... Voilà pourquoi, je me tourne vers vous en espérant avoir été assez clair .
La bonne journée

Ps: Si vous voulez plus de code n'hésitez pas à le demander, je voulais juste éviter de faire un pavé monstrueux