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

changerSignal is not a member of QLabel, it is a member of FenPrincipale but at line 173 you try this

QObject::connect(labelAfficherStatsHero[1], SIGNAL(changerSignal()), signalStatsHero , SLOT(heroNomChanger()));

labelAfficherStatsHero[1] is a QLabel and therefore only supports the signals defined for QLabel, that is

void QLabel linkActivated (const QString  &link )
void QLabel linkHovered (const QString  &link )

// Inherited from QFrame
void QWidget    customContextMenuRequested (const QPoint  &pos )

// Inherited from QObject
void QObject    destroyed (QObject *obj=0 )
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.