Qt - 没有这样的信号错误

lie*_*ewl 8 qt signals-slots

我试图在冰箱磁铁示例中的一个可拖动小部件中发生双击时触发信号.这是我对示例源所做的更改:

DragLabel:

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

};
Run Code Online (Sandbox Code Playgroud)

我在实现文件中唯一改变的是添加connect(this,SIGNAL(testSignal()),this,SLOT(testSlot()));到DragLabel的构造函数.

尝试编译项目导致' 未定义引用`DragLabel :: testSignal() '和' collect2:ld返回1退出状态 '错误.

当我注释掉对信号的调用时,它会编译并运行,但在应用程序输出中发出' Object :: connect:在draglabel.cpp中没有这样的信号QLabel :: testSignal() '警告.显然testSignal()不被识别为信号.

我试图将Q_OBJECT宏添加到DragLabel,但它导致4' 未定义引用'vtable for DragLabel' '警告和' collect2:ld返回1退出状态 '错误.

我错过了什么?

Mar*_*ett 12

把Q_OBJECT宏放在顶部,(必须是类中的第一件事而没有";")

确保进行完全重建,VS-add-in尤其不会始终注意到文件在没有重建的情况下已成为qt感知.

更好的建议20种调试Qt信号和插槽的方法