信号槽自定义结构问题



我在将自己的结构从信号发射到插槽时遇到问题。结构如下所示:

WorldObjectChange.h

#pragma once
struct WorldObjectChange  {
WorldObjectChange() {}
~WorldObjectChange() {}
double x;
};        
Q_DECLARE_METATYPE(WorldObjectChange)

我调用 qRegisterMetaType 以使信号槽方法中的类型已知

主.c

QApplication a(argc, argv); 
qRegisterMetaType<WorldObjectChange>();

连接已排队,因为信号和插槽位于不同的线程中。 连接发生在初始化并启动 object1 线程的类的构造函数中。

InitClass::InitClass(Object2 *object2) {
Object1* object1 = new Object1();
connect(object1, SIGNAL(updateObjects(WorldObjectChange)), object2, SLOT(updateObjects(WorldObjectChange)));
}

对象1.h

#include "WorldObjectChange.h"
class object1 : public QObject{
Q_OBJECT
public:
object1();
public signals:
void updateObjects(WorldObjectChange);
};

对象2.h

#include "WorldObjectChange.h"
class object2: public QLabel {
Q_OBJECT
public:
explicit object2(QWidget * parent = 0);
public slots:
void updateObjects(WorldObjectChange worldChangeVector);
};

对象2.cpp

void updateObjects(WorldObjectChange worldChangeVector) { }

该对象在对象 1 中似乎工作正常,但是每当我在对象 2 中为插槽添加行时,我都会收到以下错误:

错误LNK2019未解析的外部符号"public: void __cdecl worldOutputGrid::updateObjects(struct WorldObjectChange(" (?updateObjects@worldOutputGrid@@QEAAXUWorldObjectChange@@@Z( 在函数"私有:静态空隙__cdecl"中引用 worldOutputGrid::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *(" (?qt_static_metacall@worldOutputGrid@@CAXPEAVQObject@@W4Call@QMetaObject@@HPEAPEAX@Z(

提前感谢您的帮助

connect采用QObject*,因为它是第 1 个和第 3参数。在您的代码中:

connect(object1, SIGNAL(updateObjects(WorldObjectChange)), object2, SLOT(updateObjects(WorldObjectChange)));

object1不是QObject*.您需要改用:

connect(&object1, SIGNAL(updateObjects(WorldObjectChange)), object2, SLOT(updateObjects(WorldObjectChange)));

最新更新