Index: gammaray/core/probe.cpp
===================================================================
--- gammaray.orig/core/probe.cpp
+++ gammaray/core/probe.cpp
@@ -248,11 +248,11 @@ Probe::Probe(QObject *parent)
     connect(m_queueTimer, SIGNAL(timeout()),
             this, SLOT(processQueuedObjectChanges()));
 
-#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
-    const auto* signal_spy_set = qt_signal_spy_callback_set.load();
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+    m_previousSignalSpyCallbackSet = qt_signal_spy_callback_set.load();
 #else
     const auto* signal_spy_set = &qt_signal_spy_callback_set;
-#endif
+
     if (signal_spy_set) {
         m_previousSignalSpyCallbackSet.signalBeginCallback
             = signal_spy_set->signal_begin_callback;
@@ -264,6 +264,7 @@ Probe::Probe(QObject *parent)
             = signal_spy_set->slot_end_callback;
         registerSignalSpyCallbackSet(m_previousSignalSpyCallbackSet); // daisy-chain existing callbacks
     }
+#endif
 
     connect(this, SIGNAL(objectCreated(QObject*)), m_metaObjectRegistry, SLOT(objectAdded(QObject*)));
     connect(this, SIGNAL(objectDestroyed(QObject*)), m_metaObjectRegistry, SLOT(objectRemoved(QObject*)));
@@ -274,16 +275,16 @@ Probe::~Probe()
     emit aboutToDetach();
     IF_DEBUG(cerr << "detaching GammaRay probe" << endl;
              )
-
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+    qt_register_signal_spy_callbacks(m_previousSignalSpyCallbackSet);
+#else
     const QSignalSpyCallbackSet prevCallbacks = {
         m_previousSignalSpyCallbackSet.signalBeginCallback,
         m_previousSignalSpyCallbackSet.slotBeginCallback,
         m_previousSignalSpyCallbackSet.signalEndCallback,
         m_previousSignalSpyCallbackSet.slotEndCallback
     };
-#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
-    qt_register_signal_spy_callbacks(&prevCallbacks);
-#else
+
     qt_register_signal_spy_callbacks(prevCallbacks);
 #endif
 
@@ -1013,14 +1014,14 @@ void Probe::registerSignalSpyCallbackSet
 
 void Probe::setupSignalSpyCallbacks()
 {
-    QSignalSpyCallbackSet cbs = { nullptr, nullptr, nullptr, nullptr };
+    static QSignalSpyCallbackSet cbs = { nullptr, nullptr, nullptr, nullptr };
     foreach (const auto &it, m_signalSpyCallbacks) {
         if (it.signalBeginCallback) cbs.signal_begin_callback = signal_begin_callback;
         if (it.signalEndCallback) cbs.signal_end_callback = signal_end_callback;
         if (it.slotBeginCallback) cbs.slot_begin_callback = slot_begin_callback;
         if (it.slotEndCallback) cbs.slot_end_callback = slot_end_callback;
     }
-#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
     qt_register_signal_spy_callbacks(&cbs);
 #else
     qt_register_signal_spy_callbacks(cbs);
Index: gammaray/core/probe.h
===================================================================
--- gammaray.orig/core/probe.h
+++ gammaray/core/probe.h
@@ -49,6 +49,7 @@ class QThread;
 class QPoint;
 class QTimer;
 class QMutex;
+class QSignalSpyCallbackSet;
 QT_END_NAMESPACE
 
 namespace GammaRay {
@@ -251,7 +252,11 @@ private:
     QTimer *m_queueTimer;
     QVector<QObject *> m_globalEventFilters;
     QVector<SignalSpyCallbackSet> m_signalSpyCallbacks;
-    SignalSpyCallbackSet m_previousSignalSpyCallbackSet;
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+    QSignalSpyCallbackSet *m_previousSignalSpyCallbackSet;
+#else
+         SignalSpyCallbackSet m_previousSignalSpyCallbackSet;
+#endif
     Server *m_server;
 };
 }
Index: gammaray/core/tools/objectinspector/outboundconnectionsmodel.cpp
===================================================================
--- gammaray.orig/core/tools/objectinspector/outboundconnectionsmodel.cpp
+++ gammaray/core/tools/objectinspector/outboundconnectionsmodel.cpp
@@ -57,36 +57,35 @@ void OutboundConnectionsModel::setObject
     QObjectPrivate *d = QObjectPrivate::get(object);
 #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
     QObjectPrivate::ConnectionData *cd = d->connections.load();
-    if (cd) {
-        const auto &cl = cd->signalVector;
+
+    auto cl = cd->signalVector.load();
 #else
-    if (d->connectionLists) {
-        // HACK: the declaration of d->connectionsLists is not accessible for us...
-        const auto &cl = *reinterpret_cast<QVector<QObjectPrivate::ConnectionList> *>(d->connectionLists);
-#endif
-        for (int signalIndex = 0; signalIndex < cl.count(); ++signalIndex) {
-            const QObjectPrivate::Connection *c = cl.at(signalIndex).first;
-            while (c) {
-                if (!c->receiver || Probe::instance()->filterObject(c->receiver)) {
-                    c = c->nextConnectionList;
-                    continue;
-                }
 
-                Connection conn;
-                conn.endpoint = c->receiver;
-                conn.signalIndex = signalIndexToMethodIndex(m_object, signalIndex);
-#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
-                if (c->isSlotObject)
-                    conn.slotIndex = -1;
-                else
+    // HACK: the declaration of d->connectionsLists is not accessible for us...
+    const auto cl = reinterpret_cast<QVector<QObjectPrivate::ConnectionList> *>(d->connectionLists);
 #endif
-                conn.slotIndex = c->method();
-                conn.type = c->connectionType;
+
+    for (int signalIndex = 0; signalIndex < cl->count(); ++signalIndex) {
+        const QObjectPrivate::Connection *c = cl->at(signalIndex).first;
+        while (c) {
+            if (!c->receiver || Probe::instance()->filterObject(c->receiver)) {
                 c = c->nextConnectionList;
-                connections.push_back(conn);
+                continue;
             }
+
+            Connection conn;
+            conn.endpoint = c->receiver;
+            conn.signalIndex = signalIndexToMethodIndex(object, signalIndex);
+            if (c->isSlotObject)
+                conn.slotIndex = -1;
+            else
+            conn.slotIndex = c->method();
+            conn.type = c->connectionType;
+            c = c->nextConnectionList;
+            connections.push_back(conn);
         }
     }
+
 #endif
     setConnections(connections);
 }
Index: gammaray/plugins/network/networksupport.cpp
===================================================================
--- gammaray.orig/plugins/network/networksupport.cpp
+++ gammaray/plugins/network/networksupport.cpp
@@ -69,7 +69,9 @@ Q_DECLARE_METATYPE(QLocalSocket::LocalSo
 Q_DECLARE_METATYPE(QLocalSocket::LocalSocketState)
 Q_DECLARE_METATYPE(QNetworkAccessManager::NetworkAccessibility)
 Q_DECLARE_METATYPE(QNetworkConfigurationManager::Capabilities)
+#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
 Q_DECLARE_METATYPE(QSocketNotifier::Type)
+#endif
 #ifndef QT_NO_SSL
 Q_DECLARE_METATYPE(QSsl::KeyAlgorithm)
 Q_DECLARE_METATYPE(QSsl::KeyType)
Index: gammaray/plugins/qmlsupport/qmlattachedpropertyadaptor.cpp
===================================================================
--- gammaray.orig/plugins/qmlsupport/qmlattachedpropertyadaptor.cpp
+++ gammaray/plugins/qmlsupport/qmlattachedpropertyadaptor.cpp
@@ -42,9 +42,7 @@ QmlAttachedPropertyAdaptor::QmlAttachedP
 {
 }
 
-QmlAttachedPropertyAdaptor::~QmlAttachedPropertyAdaptor()
-{
-}
+QmlAttachedPropertyAdaptor::~QmlAttachedPropertyAdaptor() = default;
 
 void QmlAttachedPropertyAdaptor::doSetObject(const ObjectInstance &oi)
 {
Index: gammaray/plugins/qmlsupport/qmlattachedpropertyadaptor.h
===================================================================
--- gammaray.orig/plugins/qmlsupport/qmlattachedpropertyadaptor.h
+++ gammaray/plugins/qmlsupport/qmlattachedpropertyadaptor.h
@@ -32,6 +32,8 @@
 #include <core/propertyadaptor.h>
 #include <core/propertyadaptorfactory.h>
 
+#include <qqmlprivate.h>
+
 namespace GammaRay {
 class QmlAttachedPropertyAdaptor : public PropertyAdaptor
 {
@@ -47,7 +49,11 @@ protected:
     void doSetObject(const ObjectInstance &oi) override;
 
 private:
+#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
+    QVector<QQmlAttachedPropertiesFunc> m_attachedTypes;
+#else
     QVector<int> m_attachedTypes;
+#endif
 };
 
 /** QML attached property adaptor. */
Index: gammaray/plugins/qmlsupport/qmlbindingprovider.cpp
===================================================================
--- gammaray.orig/plugins/qmlsupport/qmlbindingprovider.cpp
+++ gammaray/plugins/qmlsupport/qmlbindingprovider.cpp
@@ -35,6 +35,7 @@
 // Qt
 #include <private/qqmlabstractbinding_p.h>
 #include <private/qqmlbinding_p.h>
+#include <private/qqmlglobal_p.h>
 #include <private/qqmlvaluetypeproxybinding_p.h>
 #include <private/qqmldata_p.h>
 #include <private/qqmlproperty_p.h>
Index: gammaray/plugins/qmlsupport/qmlcontextpropertyadaptor.cpp
===================================================================
--- gammaray.orig/plugins/qmlsupport/qmlcontextpropertyadaptor.cpp
+++ gammaray/plugins/qmlsupport/qmlcontextpropertyadaptor.cpp
@@ -100,8 +100,13 @@ void QmlContextPropertyAdaptor::doSetObj
     QV4::IdentifierHashEntry *e = propNames.d->entries;
     QV4::IdentifierHashEntry *end = e + propNames.d->alloc;
     while (e < end) {
+#if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
         if (e->identifier)
             m_contextPropertyNames.push_back(e->identifier->string);
+#else
+        if (e->identifier.isValid())
+            m_contextPropertyNames.push_back(e->identifier.toQString());
+#endif
         ++e;
     }
 #else
Index: gammaray/plugins/qmlsupport/qmlsupport.cpp
===================================================================
--- gammaray.orig/plugins/qmlsupport/qmlsupport.cpp
+++ gammaray/plugins/qmlsupport/qmlsupport.cpp
@@ -68,8 +68,10 @@
 #endif
 #include <private/qqmlcontext_p.h>
 #include <private/qqmlscriptstring_p.h>
-#include <private/qv8engine_p.h>
 #include <private/qv4qobjectwrapper_p.h>
+#if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
+#include <private/qv8engine_p.h> // removed in qtdeclarative commit fd6321c03e2d63997078bfa41332dbddefbb86b0
+#endif
 
 Q_DECLARE_METATYPE(QQmlError)
 
@@ -89,7 +91,13 @@ static QString callableQjsValueToString(
 #if defined(QT_DEPRECATED) && QT_VERSION >= QT_VERSION_CHECK(5, 5, 0)
     // note: QJSValue::engine() is deprecated
     // note: QJSValuePrivate::convertedToValue got introduced in Qt 5.5.0
+#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
+    // QJSEngine::handle() changed signature in 5.12
+    QV4::ExecutionEngine *jsEngine = v.engine()->handle();
+#else
     QV4::ExecutionEngine *jsEngine = QV8Engine::getV4(v.engine());
+#endif
+
     QV4::Scope scope(jsEngine);
 
     QV4::Scoped<QV4::QObjectMethod> qobjectMethod(scope, QJSValuePrivate::convertedToValue(jsEngine,
@@ -349,7 +357,9 @@ QmlSupport::QmlSupport(GammaRay::ProbeIn
     MO_ADD_PROPERTY_RO(QQmlType, elementName);
     MO_ADD_PROPERTY_RO(QQmlType, majorVersion);
     MO_ADD_PROPERTY_RO(QQmlType, minorVersion);
-    MO_ADD_PROPERTY_RO(QQmlType, createSize);
+#if QT_VERSION < QT_VERSION_CHECK(5, 13, 0)
+    MO_ADD_PROPERTY_RO(QQmlType, createSize); // got removed in v5.13.0-alpha1
+#endif
     MO_ADD_PROPERTY_RO(QQmlType, isCreatable);
     MO_ADD_PROPERTY_RO(QQmlType, isExtendedType);
     MO_ADD_PROPERTY_RO(QQmlType, isSingleton);
Index: gammaray/plugins/qmlsupport/qmltypeextension.cpp
===================================================================
--- gammaray.orig/plugins/qmlsupport/qmltypeextension.cpp
+++ gammaray/plugins/qmlsupport/qmltypeextension.cpp
@@ -37,6 +37,9 @@
 #include <private/qqmlcompiler_p.h>
 #else
 #include <private/qv4compileddata_p.h>
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+#include <private/qv4executablecompilationunit_p.h> // created in qtdeclarative commit fd6321c03e2d63997078bfa41332dbddefbb86b0
+#endif
 #endif
 #include <private/qqmldata_p.h>
 #include <private/qqmlmetatype_p.h>
Index: gammaray/plugins/widgetinspector/overlaywidget.h
===================================================================
--- gammaray.orig/plugins/widgetinspector/overlaywidget.h
+++ gammaray/plugins/widgetinspector/overlaywidget.h
@@ -32,6 +32,7 @@
 #include <QLayout>
 #include <QPointer>
 #include <QWidget>
+#include <QPainterPath>
 
 namespace GammaRay {
 
