我在将自己的结构从信号发送到插槽时遇到问题。结构如下:
WorldObjectChange.h
#pragma once
struct WorldObjectChange {
WorldObjectChange() {}
~WorldObjectChange() {}
double x;
};
Q_DECLARE_METATYPE(WorldObjectChange)
我叫qRegisterMetaType以便在信号插槽方法中知道类型
main.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)));
}
object1.h
#include "WorldObjectChange.h"
class object1 : public QObject{
Q_OBJECT
public:
object1();
public signals:
void updateObjects(WorldObjectChange);
};
object2.h
#include "WorldObjectChange.h"
class object2: public QLabel {
Q_OBJECT
public:
explicit object2(QWidget * parent = 0);
public slots:
void updateObjects(WorldObjectChange worldChangeVector);
};
object2.cpp
void updateObjects(WorldObjectChange worldChangeVector) { }
该对象似乎在object1中工作正常,但是每当我在对象2中添加插槽的行时,都会出现以下错误:
错误LNK2019无法解析的外部符号“ public:无效__cdecl worldOutputGrid :: updateObjects(struct WorldObjectChange)“ (?updateObjects @ worldOutputGrid @@ QEAAXUWorldObjectChange @@@ Z) 在函数“私有:静态void __cdecl中引用” worldOutputGrid :: qt_static_metacall(类QObject *,枚举 QMetaObject :: Call,int,void * *)“ (?qt_static_metacall @ worldOutputGrid @@ CAXPEAVQObject @@ W4Call @ QMetaObject @@ HPEAPEAX @ Z)
预先感谢您的帮助
答案 0 :(得分:0)
connect
采用QObject*
,因为它是第1 st 和3 rd 参数。在您的代码中:
connect(object1, SIGNAL(updateObjects(WorldObjectChange)), object2, SLOT(updateObjects(WorldObjectChange)));
object1
不是QObject*
。您需要改用:
connect(&object1, SIGNAL(updateObjects(WorldObjectChange)), object2, SLOT(updateObjects(WorldObjectChange)));