Hey i try to work on custom signal but i get an compiling error: QObject::connect: No such signal QLabel::changerSignal() in ..\textbasedrpg\FenPrincipale.cpp:173
But i seem to write exactly same thing in header and .cpp »That an big moment i try to see what i do incorrect but can't find. Same an QMake dosen't work
I'll give the needed code. That worth more than words. Can the emit can be the problem? Wrong typo? Thank in advance
.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 <QSignalMapper>
#include <QMouseEvent>
#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*> labelAfficherStats;
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 signal qui va toute les reliées ensembles
signalStatsHero = new QSignalMapper;
signalStatsHero->setMapping(labelAfficherStatsHero[0], 0);
signalStatsHero->setMapping(labelAfficherStatsHero[1], 1);
QObject::connect(labelAfficherStatsHero[1], SIGNAL(changerSignal()), signalStatsHero , SLOT(heroNomChanger()));
// 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();
}
void FenPrincipale::heroNomChanger()
{
emit changerSignal();
}
#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();
void heroNomChanger();
signals:
void changerSignal();
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;
QSignalMapper *signalStatsHero;
};
#endif // FENPRINCIPALE_H