Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Integration fo Qt3D C++ back-end with QML front-end?



  • Hi,
    I have a full C++ application encapsulating a class derived form Qt3DWindow. This class makes a lot of stuff. Now I have to integrate this class in an application that is written with QML. So, I have a full front-end in QML containing one item for my view/window. The problem is that I do not arrive to make the migration.

    I tried to extract the root entity, add it a camera and a ForwardRenderer, as found in a QML example. But nothing is displayed. In fact even the "clear" operation is not performed. I have seen that the renderer as no surface. So I explicitely set the main window as surface. No change. I tried to put my entity in a Scene3D. No change. I tried to encapsulate all my stuff in a QWidget. But QML does not accept QWidget, according to what I found on Internet.

    So, I am a little bit desperate. If someone has the solution.
    Thanks.



  • OK,
    Finally we found the solution. The tip is to create a Scene3D in the qml file. And to create the camera and ForwaqrdRenderer in the QML too (and not in the C++).

        Scene3D {
            id: scene3D
            anchors.fill: parent
            anchors.margins: 10
            focus: true
    
            Root3DEntity {
                id : root3DEntity
                renderSettings : RenderSettings {
                    id : renderSettings
                    pickingSettings.pickMethod : pickingSettings.PrimitivePicking
    
                    activeFrameGraph: ForwardRenderer {
                        id: renderer
                        clearColor: "#4d4d4f"
    
                        camera: Camera {
                            id: camera
                            projectionType: CameraLens.PerspectiveProjection
                            fieldOfView: 45
                            nearPlane: 0.1
                            farPlane: 1000.0
                            position: Qt.vector3d(0.0, 0.0, 2.0)
                            upVector: Qt.vector3d(0.0, 1.0, 0.0)
                            viewCenter: Qt.vector3d(0.0, 0.0, 0.0)
                        }
                    }
                }
            }
        }