QObject信号和插槽未访问功能

QObject signals and slots not accessing function

本文关键字:访问 功能 插槽 信号 QObject      更新时间:2023-10-16

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

我的头文件:

#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_OBJECT宏。它是MOC(元对象编译器)用来为代码生成附加元信息的。

class MyClass: public QObject
{
    Q_OBJECT
    // all other class data, member function declaration
public:
    MyClass( QObject *parent = nullptr );
};

这应该足够好了。


编辑:

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