gpt4 book ai didi

Qt - 没有这样的信号错误

转载 作者:行者123 更新时间:2023-12-04 06:28:27 25 4
gpt4 key购买 nike

我试图在 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 的构造函数。

尝试编译项目导致“未定义对‘DragLabel::testSignal()’的引用”和“collect2: ld returns 1 exit status”错误。

当我注释掉对信号的调用时,它会编译并运行,但会在应用程序输出中发出“Object::connect: No such signal QLabel::testSignal() in draglabel.cpp”警告。显然 testSignal() 没有被识别为信号。

我曾尝试将 Q_OBJECT 宏添加到 DragLabel,但它导致 4 个“未定义对 DragLabel 的 vtable 的引用”警告和一个“collect2:ld 返回 1 个退出状态”错误。

我错过了什么?

最佳答案

将 Q_OBJECT 宏放在顶部,(必须是类(class)中的第一件事并且没有“;”)

确保您进行了完全重建,尤其是 VS 插件并不总是注意到文件在没有重建的情况下已成为 qt-aware。

更多好建议20 ways to debug Qt signals and slots

关于Qt - 没有这样的信号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2610151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com