diff --git a/src/core/api/qwebengineurlschemehandler.cpp b/src/core/api/qwebengineurlschemehandler.cpp
index 33064889389d5a35d98d15da16503b5a8de2dc31..e14da6fb5cc9ad175f67742af76e0bfd20c7b81f 100644
--- a/src/core/api/qwebengineurlschemehandler.cpp
+++ b/src/core/api/qwebengineurlschemehandler.cpp
@@ -84,6 +84,7 @@ QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme,
 
 QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler()
 {
+    Q_EMIT destroyed(this);
     delete d_ptr;
 }
 
diff --git a/src/core/api/qwebengineurlschemehandler.h b/src/core/api/qwebengineurlschemehandler.h
index b6f6a69f071f492f3ae0edc599c55952c9b65f50..1ec32e46c9de83182d0974aac876aae34243eed7 100644
--- a/src/core/api/qwebengineurlschemehandler.h
+++ b/src/core/api/qwebengineurlschemehandler.h
@@ -57,6 +57,9 @@ public:
 
     virtual void requestStarted(QWebEngineUrlRequestJob*) = 0;
 
+Q_SIGNALS:
+    void destroyed(QWebEngineUrlSchemeHandler*);
+
 private:
     Q_DISABLE_COPY(QWebEngineUrlSchemeHandler)
     Q_DECLARE_PRIVATE(QWebEngineUrlSchemeHandler)
diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp
index 323659827825179e376eaa69652ba8affd77f51f..66cba9bc38fc317f4ee5239fb5126cbc9c9c9714 100644
--- a/src/webenginewidgets/api/qwebengineprofile.cpp
+++ b/src/webenginewidgets/api/qwebengineprofile.cpp
@@ -582,7 +582,7 @@ void QWebEngineProfile::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *hand
     d->m_urlSchemeHandlers.insert(scheme, handler);
     d->browserContext()->customUrlSchemeHandlers().append(handler->d_func());
     d->browserContext()->updateCustomUrlSchemeHandlers();
-    connect(handler, SIGNAL(destroyed(QObject*)), this, SLOT(destroyedUrlSchemeHandler(QObject*)));
+    connect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*)));
 }
 
 /*!
@@ -599,7 +599,7 @@ void QWebEngineProfile::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handl
     int count = d->m_urlSchemeHandlers.remove(handler->scheme());
     if (!count)
         return;
-    disconnect(handler, SIGNAL(destroyed(QObject*)), this, SLOT(destroyedUrlSchemeHandler(QObject*)));
+    disconnect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*)));
     d->browserContext()->removeCustomUrlSchemeHandler(handler->d_func());
     d->browserContext()->updateCustomUrlSchemeHandlers();
 }
@@ -617,9 +617,9 @@ void QWebEngineProfile::clearUrlSchemeHandlers()
     d->browserContext()->updateCustomUrlSchemeHandlers();
 }
 
-void QWebEngineProfile::destroyedUrlSchemeHandler(QObject *obj)
+void QWebEngineProfile::destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler *obj)
 {
-    removeUrlSchemeHandler(qobject_cast<QWebEngineUrlSchemeHandler*>(obj));
+    removeUrlSchemeHandler(obj);
 }
 
 QT_END_NAMESPACE
diff --git a/src/webenginewidgets/api/qwebengineprofile.h b/src/webenginewidgets/api/qwebengineprofile.h
index 5532f12ee8eeadcba9b6ea279af0557f4516eaf8..82946a223b36242aae6c996f5b345387b709f0ac 100644
--- a/src/webenginewidgets/api/qwebengineprofile.h
+++ b/src/webenginewidgets/api/qwebengineprofile.h
@@ -121,7 +121,7 @@ Q_SIGNALS:
     void downloadRequested(QWebEngineDownloadItem *download);
 
 private Q_SLOTS:
-    void destroyedUrlSchemeHandler(QObject *obj);
+    void destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler *obj);
 
 private:
     Q_DISABLE_COPY(QWebEngineProfile)