Hey!

On Qt, i created an QList<QLabel*> but when i try to access or modify it in later functions i get:

Démarrage de C:\Projet QT\Text Based RPG\build-textbasedrpg-Desktop_Qt_5_1_0_MinGW_32bit-Debug\debug\textbasedrpg.exe...ASSERT failure in QList<T>::operator[]: "index out of range", file ......\Qt\Qt5.1.0\5.1.0\mingw48_32\include/QtCore/qlist.h, line 460
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.

Whatever i do later on further functions i get this error. Also i get an runtime error message:

457522a72dc580e5c2b2741a52a3bc18

I tried many things without changes

There goes my codes:

.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <QApplication>
#include <QLabel>
#include <QComboBox>
#include <QMessageBox>
#include <QLabel>
#include <Qt>
#include <QVariant>
#include <QList>
#include "FenPrincipale.h"
#include "Personnage.h"
#include "Ennemis.h"
#include "Barbare.h"
#include "Magicien.h"
#include "LevelUp.h"
#include "UtiliserObjet.h"
#include "SystemeBataille.h"
#include "InitVariable.h"

extern QString nomHero;
extern QLabel *nomEnnemi;
extern int niveauDuJoueur;
extern int m_StatsVieMaxPerso;
extern  int m_StatsVieActuelPerso;
extern int m_StatsMpMaxPerso;
extern int m_StatsMpActuelPerso;
extern int m_StatsStrPerso;
extern int m_StatsRstPerso;
extern int m_StatsVitPerso;
extern int m_StatsBaseDmgPerso;
extern int pointsExperience;
extern QString *barbare;
extern QString *sorcier;
extern QString *pasteur;
extern QString classeDuJoueur;
extern  QString texteSelectionnerChoisirNom;
extern QString texteSelectionnerChoisirClasse;

SystemeBataille systemebat;

FenPrincipale::FenPrincipale()
{

    //BOUTONS


     // Bouton Commencer et c'est propriétées

  boutonCommencer = new QPushButton(tr("Commencer la partie"));


    // Bouton A Propos et c'est propriétées

  QPushButton *boutonAPropos = new QPushButton(tr("À Propos du Jeu"));


   // On crée le bouton Nord et c'est propriétees


    QPushButton *boutonNord = new QPushButton(tr("Nord"));
    boutonNord->setDisabled(true);
    boutonNord->setHidden(true);

    // On crée le bouton Sud et c'est propriétées

    QPushButton *boutonSud = new QPushButton(tr("Sud"));
    boutonSud->setDisabled(true);
    boutonSud->setHidden(true);

    // On crée le bouton Ouest et c'est propritées


    QPushButton *boutonOuest = new QPushButton(tr("Ouest"));
    boutonOuest->setDisabled(true);
    boutonOuest->setHidden(true);

    // On crée le bouton Est et c'est propriétées


    QPushButton *boutonEst = new QPushButton(tr("Est"));
    boutonEst->setDisabled(true);
    boutonEst->setHidden(true);

    // On crée la liste déroulante d'attaque et c'est propriétées puis son titre

    listeDeroulanteAttaque = new QComboBox;
    listeDeroulanteAttaque->addItem(tr("Test"));
    listeDeroulanteAttaque->addItem(tr("1"));
    listeDeroulanteAttaque->setHidden(true);

    QLabel *titreBoiteAttaque = new QLabel("Attaques");
    titreBoiteAttaque->setHidden(true);


   // On crée la liste déroulante d'objets et c'est propriétées

    QComboBox *listeDeroulanteObjet = new QComboBox;
    listeDeroulanteObjet->setHidden(true);
    QLabel *titreBoiteObjet = new QLabel(tr("Objets"));
    titreBoiteObjet->setHidden(true);



    // LAYERS ET BOITES ET C'EST CONTENUS


    // On crée le label qui contient les stats et nom de l'ennemi

  nomEnnemi = new QLabel;
  nomEnnemi->setFont(QFont("Arial", 8));
  nomEnnemi->setTextFormat(Qt::PlainText);
nomEnnemi->setTextInteractionFlags(Qt::NoTextInteraction);
nomEnnemi->setText("");
nomEnnemi->setHidden(true);


    // On crée le QLabel pour le texte et c'est propriétées

     zoneTexte = new QLabel;
     zoneTexte->setFont(QFont("Arial", 32));
     zoneTexte->setTextFormat(Qt::PlainText);
     zoneTexte->setTextInteractionFlags(Qt::NoTextInteraction);
     zoneTexte->setAlignment(Qt::AlignCenter);
     zoneTexte->setText(tr(""));


     // On crée un 2ieme QLabel de texte et c'est propriétées

     zoneTexte2 = new QLabel;
     zoneTexte2->setFont(QFont("Arial", 20));
     zoneTexte2->setTextFormat(Qt::PlainText);
     zoneTexte2->setTextInteractionFlags(Qt::NoTextInteraction);
     zoneTexte2->setAlignment(Qt::AlignTop);
     zoneTexte2->setText(tr(""));


     // On crée la boite contenant les statistiques du héro et c'est propriétées

    optionBoiteStats = new QGroupBox;
    optionBoiteStats->setTitle(tr("Héro"));
    optionBoiteStats->setAlignment(Qt::AlignHCenter);

    // On crée le tableau qui contiendra les statistiques du héros


    QList<QLabel*> labelAfficherStatsHero;

     labelAfficherStatsHero << new QLabel (QString(tr("Niveau  %1").arg(niveauDuJoueur)) ); // Début du réglage du tableau qui contient les stats
     labelAfficherStatsHero << new QLabel (QString(tr("Nom: %1").arg(nomHero)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Classe: %1").arg(classeDuJoueur)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Santé Maximum: %1").arg( m_StatsVieMaxPerso)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Santé Actuel: %1").arg( m_StatsVieActuelPerso)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Points de Magie Maximum: %1").arg( m_StatsMpMaxPerso)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Points de Magie Actuel: %1").arg( m_StatsMpActuelPerso)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Force: %1" ).arg(m_StatsStrPerso)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Résistance: %1" ).arg(m_StatsRstPerso)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Vitesse: %1").arg(m_StatsVitPerso)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Dégats de Base: %1").arg(m_StatsBaseDmgPerso)) );
    labelAfficherStatsHero << new QLabel (QString(tr("Points d'Expérience: %1").arg(pointsExperience)) ); // Fin du réglage tu tableau qui contients les stats


   // On crée le layout contenant les statistique du héro et c'est propriétés

    layoutStats = new QVBoxLayout; // Ici on déclare un layout pour les stats
    layoutStats->addWidget(optionBoiteStats);
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(0)->text()))); // Début de l'ajout des Widgets dans le layout des stats
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(1)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(2)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(3)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(4)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(5)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(6)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(7)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(8)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(9)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(10)->text())));
    layoutStats->addWidget((new QLabel(labelAfficherStatsHero.at(11)->text()))); // Fin de l'ajout des Widgets dans le layout des stats


    // On crée la boite contenant les statistique de l'ennemi et c'est propriétées

    QGroupBox *optionBoiteStatsEnnemi = new QGroupBox; // On déclare un QGroupBox qui contiendra les stats ennemis
    optionBoiteStatsEnnemi->setTitle(tr("Ennemi")); // On règle le titre de la boîte a "Ennemis"
    optionBoiteStatsEnnemi->setAlignment(Qt::AlignHCenter);// On règle l'alignement a Horizontal Centre


    // On crée le layout contenant les statistique de l'ennemi et c'est propriétées

    QVBoxLayout *layoutStatsEnnemi = new QVBoxLayout; // On Déclare un layout pour les stats ennemis
     layoutStatsEnnemi->addWidget(optionBoiteStatsEnnemi); // Début de l'ajout des widgets
     layoutStatsEnnemi->addWidget(nomEnnemi); // Fin de l'ajout des widgets


    // Layout Principal et ses boutons et ses propriétées

    layoutPrincipal = new QGridLayout; // Ici on déclare un layout en grille et sera notre layout principal
    layoutPrincipal->addWidget(boutonCommencer,1,1); // Début d'ajout des widgets
    layoutPrincipal->addWidget(boutonAPropos,1,10);
    layoutPrincipal->addWidget(optionBoiteStats,5,1,6,1);
    layoutPrincipal->addWidget(optionBoiteStatsEnnemi,5,10,6,1);
    layoutPrincipal->addWidget(boutonNord, 9,5);
    layoutPrincipal->addWidget(boutonSud, 10,5);
    layoutPrincipal->addWidget(boutonOuest, 9,4);
    layoutPrincipal->addWidget(boutonEst, 9,6);
    layoutPrincipal->addWidget(zoneTexte, 5,5);
    layoutPrincipal->addWidget(listeDeroulanteAttaque, 8,4);
    layoutPrincipal->addWidget(listeDeroulanteObjet, 8,6);
    layoutPrincipal->addWidget(titreBoiteAttaque, 7,4);
    layoutPrincipal->addWidget(titreBoiteObjet, 7,6);
    layoutPrincipal->addWidget(nomEnnemi, 5,10); // Fin de l'ajout des widgets
    layoutPrincipal->addLayout(layoutStats,5,1,6,1); // Ajout du layout des Stats au layout Principal

    setLayout(layoutPrincipal);

    // On règle titre de la fenêtre,sa taille et sa taille minimum et l'icone

    setWindowTitle(tr("....")); // Ici on règle le titre de la fenêtre
    resize(800,600); // On redimensionne la fenêtre a 800,600
    setMinimumSize(800,600); // Ici on règle la taille minimum de la fenêtre, soit: 800,600


   // On connecte les slots de Commencer Partie et À Propos

    QObject::connect(boutonAPropos, SIGNAL(clicked()), this, SLOT(aPropos())); // Début de connection des slots
    QObject::connect(listeDeroulanteAttaque , SIGNAL(activated(int)),this,SLOT(activationTechnique(int)));
    QObject::connect(boutonCommencer, SIGNAL(clicked()), this, SLOT(formulaireFiche())); // Fin de connection des slots
}

void FenPrincipale::aPropos()
{
    QMessageBox boiteAPropos; // On crée un QMessageBox nommé boiteAPropos
    boiteAPropos.setIcon(QMessageBox::Information); // Ici on règle l'icone a Information
    boiteAPropos.setWindowTitle(tr("À Propos")); // Ici on règle le titre dela fenêtre
    boiteAPropos.setInformativeText(tr("Ce jeux vidéo a été concu et programmé par Jean-Philippe Duclos."));  // Ici on règle le méssage de la boite
    boiteAPropos.setStandardButtons(QMessageBox::Ok); // Ici on règle les boutons standards
    boiteAPropos.setDefaultButton(QMessageBox::Ok); // Ici on règle le bouton par défaut
    boiteAPropos.exec(); // On exécute la boite
}



void FenPrincipale::activationTechnique(int index)
{
QString valeurDuComboBoxListeAttaque = listeDeroulanteAttaque->currentText();

systemebat.tourDuPersonnageAttaquer();
}




void FenPrincipale::formulaireFiche()
{
    // Ici on crée tout ce qui se rattache a la création de Personnage ainsi que la boite de dialogue

    QMessageBox boiteAvertirCreerPerso;
    boiteAvertirCreerPerso.setIcon(QMessageBox::Information);
    boiteAvertirCreerPerso.setWindowTitle(tr("AVERTISSEMENT"));
    boiteAvertirCreerPerso.setInformativeText(tr("Vous pouvez maintenant remplir les champs de création du personnage."));
    boiteAvertirCreerPerso.setStandardButtons(QMessageBox::Ok);
    boiteAvertirCreerPerso.setDefaultButton(QMessageBox::Ok);
    boiteAvertirCreerPerso.exec();

    boutonCommencer->setDisabled(true);


    // Ici on crée le formulaire pour la création du personnage

    QWizardPage *formulaireCreationPersonnage = new QWizardPage;

    formulaireCreationPersonnage->setTitle(tr("Création du Personnage: Veillez choisir votre classe"));

   wizardFormulaireCreationPersonnage = new QWizard ;

   wizardFormulaireCreationPersonnage->setButtonText(QWizard::CustomButton1, tr("Suivant"));
    wizardFormulaireCreationPersonnage->setOption(QWizard::HaveCustomButton1, true);
    wizardFormulaireCreationPersonnage->setButtonText(QWizard::CustomButton2, tr("Terminer la Création"));
     wizardFormulaireCreationPersonnage->setOption(QWizard::HaveCustomButton2, true);
    wizardFormulaireCreationPersonnage->addPage(formulaireCreationPersonnage);

    QList<QWizard::WizardButton> bouton_layout;
     bouton_layout  << QWizard::Stretch <<
                    QWizard::CustomButton1 <<
                      QWizard::CancelButton;
     wizardFormulaireCreationPersonnage->setButtonLayout(bouton_layout);



   // Ici on crée les boutons pour choisir sa classe

   choisirClasse = new QComboBox; // On crée la liste de classes
   choisirClasse->addItem("Barbare");
   choisirClasse->addItem("Magicien");
   choisirClasse->addItem("Pasteur");
   choisirClasse->addItem("Archer");
   choisirClasse->addItem("Combattant");


   connect(wizardFormulaireCreationPersonnage, SIGNAL(customButtonClicked(int)),this, SLOT(boiteCreationPersonnageChoisirNom()));

   // Ici on crée le layout pour le formulaire de création de personnage

  layoutFormulaire = new QHBoxLayout(wizardFormulaireCreationPersonnage);
   layoutFormulaire->addWidget(choisirClasse);

   QString texteSelectionnerChoisirClasse = choisirClasse->currentText();

   wizardFormulaireCreationPersonnage->show();

}



void FenPrincipale::boiteCreationPersonnageChoisirNom()
{
   wizardFormulaireCreationPersonnage->close();


    QWizardPage *pageChoisirNom = new QWizardPage;

    pageChoisirNom->setTitle(tr("Création du Personnage: Veillez choisir votre nom"));

   formulaireCreationPersonnageChoisirNom = new QWizard ;

   formulaireCreationPersonnageChoisirNom->setButtonText(QWizard::CustomButton1, tr("Suivant"));
     formulaireCreationPersonnageChoisirNom->setOption(QWizard::HaveCustomButton1, true);
    formulaireCreationPersonnageChoisirNom->addPage(pageChoisirNom);


   choisirNom = new QLineEdit;

   layoutFormulaireChoisirNom = new QHBoxLayout(formulaireCreationPersonnageChoisirNom);
    layoutFormulaireChoisirNom->addWidget(choisirNom);

    connect(formulaireCreationPersonnageChoisirNom, SIGNAL(customButtonClicked(int)),this, SLOT(boiteCreationPersonnageChoisirEquipement()));

    QList<QWizard::WizardButton> bouton_layout;
     bouton_layout  << QWizard::Stretch <<
                    QWizard::CustomButton1 <<
                      QWizard::CancelButton;
     formulaireCreationPersonnageChoisirNom->setButtonLayout(bouton_layout);


    formulaireCreationPersonnageChoisirNom->show();


}

void FenPrincipale::boiteCreationPersonnageChoisirEquipement()
 {
    formulaireCreationPersonnageChoisirNom->close();

     formulaireCreationPersonnageChoisirEquipement = new QWizard ;

    QWizardPage *pageChoisirEquipement = new QWizardPage;

    formulaireCreationPersonnageChoisirEquipement->setButtonText(QWizard::CustomButton1, tr("Terminer la Création"));
      formulaireCreationPersonnageChoisirEquipement->setOption(QWizard::HaveCustomButton1, true);

    pageChoisirEquipement->setTitle(tr("Création du Personnage: Veillez choisir votre équipement"));

    formulaireCreationPersonnageChoisirEquipement->addPage(pageChoisirEquipement);

   layoutFormulaireChoisirEquipement = new QHBoxLayout(formulaireCreationPersonnageChoisirEquipement);

          connect(formulaireCreationPersonnageChoisirEquipement, SIGNAL(customButtonClicked(int)),this, SLOT(regleFinaleBoiteCreationPersonnage()));

    QList<QWizard::WizardButton> bouton_layout;
     bouton_layout  << QWizard::Stretch <<
                    QWizard::CustomButton1 <<
                      QWizard::CancelButton;

     formulaireCreationPersonnageChoisirEquipement->setButtonLayout(bouton_layout);


      formulaireCreationPersonnageChoisirEquipement->show();
}


void FenPrincipale::regleFinaleBoiteCreationPersonnage()
{
    formulaireCreationPersonnageChoisirEquipement->close();

    niveauDuJoueur = 33;

    labelAfficherStatsHero[1]->setText("TEST 1..2..1..2");


}

header:

#ifndef FENPRINCIPALE_H
#define FENPRINCIPALE_H

#include <QtWidgets>
#include <QComboBox>
#include <QList>
#include <QString>
#include <QWizard>


class FenPrincipale: public QWidget
{

Q_OBJECT

public:
    FenPrincipale();
void boiteCreationPersonnage();


protected slots:
    void aPropos();
    void activationTechnique(int index);
    void formulaireFiche();
    void boiteCreationPersonnageChoisirNom();
    void boiteCreationPersonnageChoisirEquipement();
    void regleFinaleBoiteCreationPersonnage();


protected:
QPushButton *boutonCommencer;
QGridLayout *layoutPrincipal;
QVBoxLayout *layoutStats;
QGroupBox *optionBoiteStats;
QVBoxLayout *layoutStatsEnnemi;
QGroupBox *optionBoiteStatsEnnemi;
QPushButton *boutonNord;
QPushButton *boutonSud;
QPushButton *boutonOuest;
QPushButton *boutonEst;
QPushButton *boutonBonus;
QLabel *zoneTexte;
QLabel *zoneTexte2;
QString *afficherStatsHero;
QComboBox *listeDeroulanteAttaque;
QComboBox *listeDeroulanteObjet;
QLabel *titreBoiteAttaque;
QLabel *titreBoiteObjet;
QMessageBox boiteAvertirCreerPerso;
QString valeurDuComboBoxListeAttaque;
QString vieActuelHero;
QWizard *wizardFormulaireCreationPersonnage;
QWizardPage formulaireCreationPersonnage;
QLabel *introLabel;
QComboBox *choisirClasse;
QHBoxLayout *layoutFormulaire;
QHBoxLayout *layoutFormulaireChoisirNom;
QWizardPage *pageChoisirNom;
QWizard *formulaireCreationPersonnageChoisirNom;
QLineEdit *choisirNom;
QWizard *formulaireCreationPersonnageChoisirEquipement;
QWizardPage *pageChoisirEquipement;
QHBoxLayout *layoutFormulaireChoisirEquipement;
QString texteSelectionnerChoisirClasse;
 QList<QLabel*> labelAfficherStatsHero;

};

#endif // FENPRINCIPALE_H

Just give me somes clues not the whole things i want to find by myself. That how i'll get better

Thanks

Recommended Answers

All 3 Replies

The error indicates that you're trying to access part of the list that does not exist. For example, if the list is of size 3, and you ask for the object at position 3 (because the objects are labelled 0, 1, 2), this error will occur.

i'll try to put an predefined size

finally i'll find an way to get indexes existant

Thank Moschops for the clue

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.