Option 2 suggested above works best I think and is the cleanest solution. To sum it up: Header file for event definition: #ifndef EVENTDEFINITIONS_H #define EVENTDEFINITIONS_H #include <QEvent> extern const QEvent::Type TYPE_AUDIO; #endif // EVENTDEFINITIONS_H Cpp file for the event definitions where it is initialized: #include <eventdefinitions.h> const QEvent::Type TYPE_AUDIO = static_cast<QEvent::Type>(QEvent::registerEventType()); Event subclass: #ifndef AUDIOEVENT_H #define AUDIOEVENT_H #include <eventdefinitions.h> #include <QDebug> class AudioEvent : public QEvent { public: explicit AudioEvent(); }; #endif // AUDIOEVENT_H #include "audioevent.h" AudioEvent::AudioEvent() : QEvent(TYPE_AUDIO) { qDebug()<<QString("Creating custom event(%1)").arg(static_cast<int>(type())); }