У меня проблемы с передачей собственной структуры из сигнала в слот. Структура выглядит следующим образом:
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: void __cdecl
worldOutputGrid :: updateObjects (struct WorldObjectChange) "
(? UpdateObjects @ worldOutputGrid @@ QEAAXUWorldObjectChange @@@ Z)
упоминается в функции "private: static void __cdecl
worldOutputGrid :: qt_static_metacall (класс QObject *, enum
QMetaObject :: Call, int, void * *) "
(? Qt_static_metacall @ worldOutputGrid @@ CAXPEAVQObject @@ W4Call @ QMetaObject @@ HPEAPEAX @ Z) * 1026 *
Заранее спасибо за помощь