【发布时间】:2010-04-09 19:08:16
【问题描述】:
我试图在fridge magnets example 上的一个可拖动小部件中发生双击时触发信号。这是我对示例源所做的更改:
拖动标签:
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 的构造函数中。
尝试编译项目导致“undefined reference to `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 返回 1 个退出状态” '错误。
我错过了什么?
【问题讨论】:
-
您的示例代码缺少 Q_OBJECT 宏调用,这可能是您的问题的原因。
-
哦,是的,我忘了提,我之前确实尝试过添加 Q_OBJECT。我将把它添加到问题中。
标签: qt signals-slots