Qt Quick 3D - RuntimeLoader Example▲

Image non disponible

This example shows how to implement a simple asset viewer using the RuntimeLoader.

See the introductory example documentation for an explanation of how to set up a basic scene. Once we have the scene set up we can add the RuntimeLoader item:

 
Sélectionnez
RuntimeLoader {
    id: importNode
    source: importUrl
    instancing: instancingButton.checked ? instancing : null
    onBoundsChanged: helper.updateBounds(bounds)
}

Loading an asset is done by setting the RuntimeLoader's source property. In this example the source is bound to the importUrl which will be changed when the user selects a file in the file-dialog.

Assuming the asset can be loaded, the content will be created as children of the RuntimeLoader importNode. Note that the RuntimeLoader is a Node type, and since it is also the root node for the loaded asset, any transforms applied to the importNode will also affect its children.

Error handling▲

If an asset fails to load then the RuntimeLoader's status property will be set to Error. The RuntimeLoader's errorString can then be queried to get a more detailed description of the error.

In this example we will be displaying the error message in a red message box in the middle of the screen, like this:

 
Sélectionnez
Rectangle {
    id: messageBox
    visible: importNode.status !== RuntimeLoader.Success
    color: "red"
    width: parent.width * 0.8
    height: parent.height * 0.8
    anchors.centerIn: parent
    radius: Math.min(width, height) / 10
    opacity: 0.6
    Text {
        anchors.fill: parent
        font.pixelSize: 36
        text: "Status: " + importNode.errorString + "\nPress \"Import...\" to import a model"
        color: "white"
        wrapMode: Text.Wrap
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
    }
}

Moving the camera▲

To make it possible to change the position of the camera we use the WasdController from the Helpers module and bind it to our camera, like this:

 
Sélectionnez
OrbitCameraController {
    id: orbitController
    origin: orbitCameraNode
    camera: orbitCamera
    enabled: helper.orbitControllerEnabled
}
WasdController {
    id: wa