我试图通过从中继承一个新类来使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。没有变化。
答案 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 ...也许重建你的项目