diff --git a/libraries/shared/src/Node.h b/libraries/shared/src/Node.h index 96f16a31d4..fe6e95dac8 100644 --- a/libraries/shared/src/Node.h +++ b/libraries/shared/src/Node.h @@ -25,7 +25,8 @@ #include "NodeData.h" #include "SimpleMovingAverage.h" -class Node { +class Node : public QObject { + Q_OBJECT public: Node(const QUuid& uuid, char type, const HifiSockAddr& publicSocket, const HifiSockAddr& localSocket); ~Node(); diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index a4e3aaafae..46bc8391e5 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -36,6 +36,9 @@ NodeList* NodeList::_sharedInstance = NULL; NodeList* NodeList::createInstance(char ownerType, unsigned short int socketListenPort) { if (!_sharedInstance) { _sharedInstance = new NodeList(ownerType, socketListenPort); + + // register the SharedNodePointer meta-type for signals/slots + qRegisterMetaType(); } else { qDebug("NodeList createInstance called with existing instance."); } @@ -682,7 +685,7 @@ SharedNodePointer NodeList::addOrUpdateNode(const QUuid& uuid, char nodeType, // we didn't have this node, so add them Node* newNode = new Node(uuid, nodeType, publicSocket, localSocket); - NodeHash::iterator addedItem = _nodeHash.insert(newNode->getUUID(), SharedNodePointer(newNode)); + NodeHash::iterator addedItem = _nodeHash.insert(newNode->getUUID(), SharedNodePointer(newNode, &QObject::deleteLater)); qDebug() << "Added" << *newNode << "\n"; diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index e139eb62f2..efb08f32d1 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -52,6 +52,7 @@ public: typedef QSharedPointer SharedNodePointer; typedef QHash NodeHash; +Q_DECLARE_METATYPE(SharedNodePointer) class NodeList : public QObject { Q_OBJECT @@ -128,8 +129,8 @@ public slots: void pingInactiveNodes(); void removeSilentNodes(); signals: - void nodeAdded(QSharedPointer); - void nodeKilled(QSharedPointer); + void nodeAdded(SharedNodePointer); + void nodeKilled(SharedNodePointer); private: static NodeList* _sharedInstance;