Qt - no such signal error

巧了我就是萌 提交于 2019-12-09 03:08:26

问题


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?


回答1:


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




回答2:


It WAS the macro in the end. I had to reboot my PC for it to work though, cleaning and rebuilding the project didn't work out. Before rebooting Qt Creator kept giving the 'ld returned 1 exit status' error and the vtable warnings. Really weird. – David McDavidson

It's not weird, it's stupid. I got the same error, but I make it after rearrange the .h files. Say:

1 classA.h include calssB.h ;

2 classB.h declared two class, classB and classC, (classB.h declared signals & slot)

I do three things,

  1. seperate classC to another .h file

  2. eliminate all forward class declaration about classB

  3. classB.h included by classA.cpp, other than by classA.h

after that, QT compiled it. I'll test if it is working.



来源:https://stackoverflow.com/questions/2610151/qt-no-such-signal-error

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!