#pragma once class QMetaObject; #include #include #include "DynamicSignal.h" #include "DynamicSlot.h" class DynamicQObject : public QObject { typedef void (*Callback)(void*, void*, int, void **); public: DynamicQObject(QObject* parent = 0); virtual ~DynamicQObject(); void setDObjectCallback(Callback callback) { m_dObjectCallback = callback; } void setDObjectPointer(void* dObjectPointer) { m_dObjectPointer = dObjectPointer; } bool registerSignal(const QString& name, const QList& argumentsTypes, int& signalIndex); bool emitSignal(const QString& name, const QList& argumentsValues); bool registerSlot(const QString& name, const QMetaType::Type returnType, const QList& argumentsTypes, int& slotIndex); bool executeSlot(const QString& name, const QList& argumentsValues); virtual const QMetaObject *metaObject() const; int qt_metacall(QMetaObject::Call, int, void **); private: QHash m_signalsByName; QHash m_signalsBySignature; QHash m_slotsByName; QHash m_slotsBySignature; QScopedPointer m_metaObject; void* m_dObjectPointer; Callback m_dObjectCallback; };