J-P1988 0 Newbie Poster

Hey

I have an code in Qt that is an QPushButton is hidden at start of the cpp but later i want to get it appear when the file is open and an line is readed but the problem i get an segmentation fault. Can be because the setHidden(true) in an another function the problem? Here goes the codes it's worth more than simple words

FenPrincipale.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <QApplication>
#include <QLabel>
#include <QComboBox>
#include <QMessageBox>
#include <QLabel>
#include <Qt>
#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"

 using std::ifstream;

extern QLabel *nomEnnemi;

// Fenêtre et Layout

extern int m_StatsVieMaxPerso;

FenPrincipale::FenPrincipale()
{


                  //BOUTONS


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

  QPushButton *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étées


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

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

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

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


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

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


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

    // On crée le bouton pour le "Bonus" et c'est propriétées

    QPushButton *boutonBonus = new QPushButton(tr("Bonus"));
    boutonBonus->setHidden(true);

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

    QComboBox *listeDeroulanteAttaque = new QComboBox;
    listeDeroulanteAttaque->addItem(tr("Test"));
    listeDeroulanteAttaque->addItem(tr("1...2....1....2"));
    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("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

  QLabel *nomEnnemi = new QLabel;
  nomEnnemi->setFont(QFont("Arial", 8));
  nomEnnemi->setTextFormat(Qt::PlainText);
nomEnnemi->setTextInteractionFlags(Qt::NoTextInteraction);
nomEnnemi->setText(QVariant(m_StatsVieMaxPerso).toString());


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

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

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

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

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

    QVBoxLayout *layoutStats = new QVBoxLayout;
    layoutStats->addWidget(optionBoiteStats);

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

    QGroupBox *optionBoiteStatsEnnemi = new QGroupBox;
    optionBoiteStatsEnnemi->setTitle(tr("Ennemi"));
    optionBoiteStatsEnnemi->setAlignment(Qt::AlignHCenter);

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

    QVBoxLayout *layoutStatsEnnemi = new QVBoxLayout;
     layoutStatsEnnemi->addWidget(optionBoiteStatsEnnemi);
     layoutStatsEnnemi->addWidget(nomEnnemi);

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

    QGridLayout *layoutPrincipal = new QGridLayout;
    layoutPrincipal->addWidget(boutonCommencer,1,1);
    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(boutonBonus, 1,5);
    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);
    layoutPrincipal->addLayout(layoutStats,5,1,6,1);


    setLayout(layoutPrincipal);

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

    setWindowTitle(tr("...."));
    resize(800,600);
    setMinimumSize(800,600);
    setWindowIcon(QIcon("myIcon.ico"));


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

    QObject::connect(boutonAPropos, SIGNAL(clicked()), this, SLOT(aPropos()));
    QObject::connect(boutonBonus, SIGNAL(clicked()), this, SLOT(bonus()));

}

void FenPrincipale::aPropos()
{
    QMessageBox boiteAPropos;
    boiteAPropos.setIcon(QMessageBox::Information);
    boiteAPropos.setWindowTitle("À Propos");
    boiteAPropos.setInformativeText(tr("Ce jeux vidéo a été concu et programmé par Jean-Philippe Duclos."));
    boiteAPropos.setStandardButtons(QMessageBox::Ok);
    boiteAPropos.setDefaultButton(QMessageBox::Ok);
    boiteAPropos.exec();
}

void FenPrincipale::bonus()
{

 }

void FenPrincipale::verifierSiFiniLeJeu()
{
    QMessageBox boiteErreurOuvrirFichier;
    boiteErreurOuvrirFichier.setIcon(QMessageBox::Critical);
    boiteErreurOuvrirFichier.setWindowTitle("Érreur...");
    boiteErreurOuvrirFichier.setInformativeText(tr("Un fichier important n'a pas été trouvée"));
    boiteErreurOuvrirFichier.setStandardButtons(QMessageBox::Close);
    boiteErreurOuvrirFichier.setDefaultButton(QMessageBox::Close);

    ifstream fichier("C:/Projet QT/text_based_rpg/setting.txt");

    if(fichouverture s'est bien passée, on peut donc lire

       string line1; //Une variable pour stocker les lignes lues
       getline(fichier,line1); // Ici on récupéère la ligne et la stocke dans line1

           if (line1 == "a" )  // Si la ligne est la bonne , le bonus peut apparaitre
           {

               boutonBonus->setHidden(false);
           }
        else
        {
               boiteErreurOuvrirFichier.exec();
        }
}
}

FenPrincipale.h

#ifndef FENPRINCIPALE_H
#define FENPRINCIPALE_H
#include <QtGui>
#include <QComboBox>

class FenPrincipale: public QWidget
{

Q_OBJECT

public:
    FenPrincipale();
    void verifierSiFiniLeJeu();

private slots:
    void aPropos();
    void bonus();

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;
QComboBox *listeDeroulanteAttaque;
QComboBox *listeDeroulanteObjet;
QLabel *titreBoiteAttaque;
QLabel *titreBoiteObjet;
QMessageBox boiteAPropos;
QMessageBox  boiteErreurOuvrirFichier;
char ligne;
};

#endif

main.cpp

#include <QApplication>
#include <QTGui>
#include "FenPrincipale.h"
#include <iostream>
#include <string>
#include "Personnage.h"
#include "Ennemis.h"
#include "Barbare.h"
#include "Magicien.h"
#include "LevelUp.h"
#include "UtiliserObjet.h"
#include "SystemeBataille.h"
#include "InitVariable.h"

int main(int argc, char* argv[])
{

    QApplication app(argc, argv);

    QString locale = QLocale::system().name().section('_', 0, 0);
       QTranslator translator;
       translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
       app.installTranslator(&translator);

    FenPrincipale fenetre;

    fenetre.show();

    FenPrincipale fenprincipale;
    fenprincipale.verifierSiFiniLeJeu();

    return app.exec();
}

Thanks in advance

oh btw segfaut is caused by line 210

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.