QObject信号和插槽不访问功能

时间:2015-11-02 04:42:24

标签: c++ qt

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

我的标题文件:

#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...
}

1 个答案:

答案 0 :(得分:3)

您忘记在类声明后立即添加Q_OBJECT宏。这是MOC(元对象编译器)用于为您的代码生成其他元信息的内容。

class MyClass: public QObject
{
    Q_OBJECT

    // all other class data, member function declaration

public:
    MyClass( QObject *parent = nullptr );
};

这应该足够好了。

修改

另请记住在默认构造函数中使用nullptr默认QObject指针。