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:
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