C++ Q对象信号和插槽不访问功能

C++ Q对象信号和插槽不访问功能,c++,qt,C++,Qt,我有一个函数,我正试图通过信号和插槽连接,但当我运行可执行文件时,该函数没有被调用。我在函数中放入了一个调试错误,因此我知道它没有被调用。我的代码如下所示: 我的头文件: #include "MyWidget.h" #ifndef MYCLASS_H #define MYCLASS_H class MyClass: public QObject{ Q_OBJECT public: MyClass( QObject *parent = nullptr); MyW

我有一个函数,我正试图通过信号和插槽连接,但当我运行可执行文件时,该函数没有被调用。我在函数中放入了一个调试错误,因此我知道它没有被调用。我的代码如下所示:

我的头文件:

#include "MyWidget.h"
#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass: public QObject{

    Q_OBJECT
    public:
    MyClass( QObject *parent = nullptr);
    MyWidget *myWidget;

    public slots:
    void setTranslation(int value);
};

#endif
我的源文件:

#include "MyClass.h"

MyClass::MyClass(QObject *parent): QObject(parent)
{
    some code here....

    QSlider *xSlider = new QSlider(Qt::Vertical);
    xSlider->setRange(0, 10);

    QObject::connect(xSlider, SIGNAL(valueChanged(int)),
                 this, SLOT(setTranslation(int)));

    some code here...
}

void MyClass::setTranslation(int value)
{
    some code here...
}

您忘记在类声明之后立即添加
Q_对象
宏。它是MOC(元对象编译器)用来为代码生成附加元信息的工具

class MyClass: public QObject
{
    Q_OBJECT

    // all other class data, member function declaration

public:
    MyClass( QObject *parent = nullptr );
};
这应该足够好了


编辑:


还记得在默认构造函数中使用默认的
nullptr
QObject指针。

即使将Q_对象添加到我的文件中,它仍然会出现相同的错误,但现在它说:QObject::connect:没有这样的插槽MyClass::setTranslation(int值)相反,请查看我的编辑,也许您需要重建代码。@Jade您需要在类定义的最顶端插入
Q_OBJECT
。您的所有其他行都保持不变。顺便说一句,这里是相关的文档:我已经包括了你建议的内容,删除了我的.o文件和exe文件,并重建了项目,即使在我打开文件时它编译得很好,但仍然找不到setTranslationfunction@Jadehrm,可以尝试在清理项目和重建之间显式地重新运行qmake。可能是
moc
的内容没有重新生成。否则我就不知所措了——乔希有正确的答案。缺少Q_对象宏将导致信号/插槽失败(您肯定缺少该宏)。