我试图在冰箱磁铁示例上的一个可拖动小部件中发生双击时触发信号。这是我对示例源所做的更改:
拖动标签:
class DragLabel : public QLabel
{
public:
DragLabel(const QString &text, QWidget *parent);
QString labelText() const;
public slots:
void testSlot(){qDebug()<<"testSlot";} //<-- implemented this slot
protected:
void mouseDoubleClickEvent(QMouseEvent *ev){emit testSignal();} //<-- overriden this method
private:
QString m_labelText;
signals:
void testSignal(); //<-- added this signal
};
我在实现文件中唯一更改的是添加connect(this,SIGNAL(testSignal()),this,SLOT(testSlot()));
到 DragLabel 的构造函数中。
尝试编译该项目导致“未定义对 `DragLabel::testSignal() 的引用”和“ collect2: ld returned 1 exit status ”错误。
当我注释掉对信号的调用时,它会编译并运行,但会在应用程序输出中发出“ Object::connect: No such signal QLabel::testSignal() in draglabel.cpp ”警告。显然 testSignal() 没有被识别为信号。
我尝试将 Q_OBJECT 宏添加到 DragLabel 但它导致 4 ' undefined reference to `vtable for DragLabel' ' 警告和 ' collect2: ld returned 1 exit status ' 错误。
我错过了什么?