diff --git a/src/quick3d/qquick3dscenerootnode_p.h b/src/quick3d/qquick3dscenerootnode_p.h
index bf20c5ea21f7c9d05854e279a6bf22543d8966df..f852e6f48e5d395c5cbbd666df2292fb1fb63dfe 100644
--- a/src/quick3d/qquick3dscenerootnode_p.h
+++ b/src/quick3d/qquick3dscenerootnode_p.h
@@ -48,6 +48,7 @@ class QQuick3DViewport;
 
 class QQuick3DSceneRootNode : public QQuick3DNode
 {
+    Q_OBJECT
 public:
     explicit QQuick3DSceneRootNode(QQuick3DViewport *view3D = nullptr, QQuick3DNode *parent = nullptr);
     ~QQuick3DSceneRootNode() override;
diff --git a/src/quick3d/qquick3dviewport.cpp b/src/quick3d/qquick3dviewport.cpp
index a3ddf3ab33467eb56e8c9035aaf700223291ae2a..7cf4be0aaa1cb06483ddd8bafc390e59778111de 100644
--- a/src/quick3d/qquick3dviewport.cpp
+++ b/src/quick3d/qquick3dviewport.cpp
@@ -499,7 +499,7 @@ void QQuick3DViewport::setImportScene(QQuick3DNode *inScene)
             return;
         }
 
-        QQuick3DSceneRootNode *rn = dynamic_cast<QQuick3DSceneRootNode *>(scene);
+        QQuick3DSceneRootNode *rn = qobject_cast<QQuick3DSceneRootNode *>(scene);
         scene = rn ? rn->view3D()->importScene() : nullptr;
     }
 
@@ -520,7 +520,7 @@ void QQuick3DViewport::setImportScene(QQuick3DNode *inScene)
 
         QQuick3DNode *scene = inScene;
         while (scene) {
-            QQuick3DSceneRootNode *rn = dynamic_cast<QQuick3DSceneRootNode *>(scene);
+            QQuick3DSceneRootNode *rn = qobject_cast<QQuick3DSceneRootNode *>(scene);
             scene = rn ? rn->view3D()->importScene() : nullptr;
 
             if (scene) {
@@ -693,7 +693,7 @@ void QQuick3DViewport::updateDynamicTextures()
         }
 
         // if importScene has another import
-        QQuick3DSceneRootNode *rn = dynamic_cast<QQuick3DSceneRootNode *>(scene);
+        QQuick3DSceneRootNode *rn = qobject_cast<QQuick3DSceneRootNode *>(scene);
         scene = rn ? rn->view3D()->importScene() : nullptr;
     }
 }