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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With