Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unresolved external symbol on signals

Tags:

c++

qt

I was trying to make QLCDNumber clickable, by inheriting a new class from it. All it does is define a mouseReleaseEvent(QMouseEvent *e) sending a clicked() signal. I think my code is correct, but it can't find the signal (unresolved external symbol on clicked() inside mouseReleaseEvent()

//myLCDNumber.h
#ifndef MYLCDNUMBER_H
#define MYLCDNUMBER_H

#include <QLCDNumber>
#include <QMouseEvent>

class myLCDNumber : public QLCDNumber
{
    public:
        myLCDNumber(uint numDigits);
        ~myLCDNumber();
        void mouseReleaseEvent(QMouseEvent *e);

    signals:
        void clicked(void);
};

#endif // MYLCDNUMBER_H

//myLCDNumber.cpp
#include "mylcdnumber.h"

    myLCDNumber::myLCDNumber(uint numDigits):QLCDNumber(numDigits){}

    myLCDNumber::~myLCDNumber(){}

    void myLCDNumber::mouseReleaseEvent(QMouseEvent *e)
    {
        qDebug("Click check");
        if (e->button() == Qt::LeftButton)
            emit myLCDNumber::clicked();
    }

EDIT : I checked the SOURCES list for all my files to be correctly referenced in my project file, and I rerun qmake. No change.

like image 470
William RENOU Avatar asked Sep 08 '25 08:09

William RENOU


1 Answers

Your problem is that you use signals and/or slots without using Qt's Meta Object Compiler. Add the Q_OBJECT Macro to your class definition and it'll work:

//myLCDNumber.h
#ifndef MYLCDNUMBER_H
#define MYLCDNUMBER_H

#include <QLCDNumber>
#include <QMouseEvent>

class myLCDNumber : public QLCDNumber
{
    Q_OBJECT

    public:
        myLCDNumber(uint numDigits);
        ~myLCDNumber();
        void mouseReleaseEvent(QMouseEvent *e);

    signals:
        void clicked(void);
};

#endif // MYLCDNUMBER_H

Don't forget to add the header file to the HEADERS variable and rerun qmake before building again.

like image 87
msrd0 Avatar answered Sep 10 '25 02:09

msrd0