Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt - no such signal error

I'm trying to trigger a signal when a double click happens in one of the draggable widgets on the fridge magnets example. Here's the changes I made to the example source:

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

};

The only thing I changed in the implementation file is adding connect(this,SIGNAL(testSignal()),this,SLOT(testSlot())); to DragLabel's constructor.

Trying to compile the project resulted in 'undefined reference to `DragLabel::testSignal()' and 'collect2: ld returned 1 exit status' errors.

When I comment out the call to the signal, it compiles and runs, but gives off 'Object::connect: No such signal QLabel::testSignal() in draglabel.cpp' warning in the application output. Apparently testSignal() isn't being recognized as a signal.

I've tried to add the Q_OBJECT macro to DragLabel but it results in 4 'undefined reference to `vtable for DragLabel'' warnings and a 'collect2: ld returned 1 exit status' error.

What am I missing?

like image 271
liewl Avatar asked Apr 09 '10 19:04

liewl


1 Answers

Put the Q_OBJECT macro at the top, (must be first thing in the class and no ";" )

Make sure you do a full rebuild, the VS-add-in especially doesn't always notice that a file has become qt-aware without a rebuild.

More good advice 20 ways to debug Qt signals and slots

like image 187
Martin Beckett Avatar answered Nov 10 '22 21:11

Martin Beckett