信号上未解析的外部符号

时间:2015-01-31 12:31:56

标签: c++ qt

我试图通过从中继承一个新类来使QLCDNumber可点击。它所做的只是定义一个mouseReleaseEvent(QMouseEvent * e)发送clicked()信号。 我认为我的代码是正确的,但它无法找到信号(mouseReleaseEvent()中的clicked()上未解析的外部符号

//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();
    }

编辑:我检查了SOURCES列表,以便在我的项目文件中正确引用我的所有文件,然后重新运行qmake。没有变化。

2 个答案:

答案 0 :(得分:4)

您的问题是您在不使用Qt的元对象编译器的情况下使用信号和/或插槽。将Q_OBJECT宏添加到您的班级定义中,它就可以了:

//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

请勿忘记将标头文件添加到HEADERS变量中,然后重新运行qmake,然后重新构建。

答案 1 :(得分:0)

你需要将Q_OBJECT宏添加到你的类声明中并运行qmake ...也许重建你的项目