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