我试图在双击可拖动小部件之一时触发信号冰箱贴示例。以下是我对示例源代码所做的更改:
拖动标签:
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 的构造函数。
尝试编译该项目导致'对 `DragLabel::testSignal() 的未定义引用' and 'Collect2: ld 返回 1 退出状态' 错误。
当我注释掉对信号的调用时,它会编译并运行,但会发出'Object::connect:draglabel.cpp 中没有这样的信号 QLabel::testSignal()' 应用程序输出中的警告。显然 testSignal() 没有被识别为信号。
我尝试将 Q_OBJECT 宏添加到 DragLabel 但结果是 4 '对“DragLabel 的 vtable”的未定义引用'警告和'Collect2: ld 返回 1 退出状态' error.
我缺少什么?
将 Q_OBJECT 宏放在顶部(必须是类中的第一件事,并且没有“;”)
确保进行完全重建,尤其是 VS 插件并不总是注意到文件在没有重建的情况下已成为 qt 感知的。
更多好建议调试 Qt 信号和槽的 20 种方法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)