- Qt 6.9
- Qt 3D
- Qt 3D: Basic Shapes C++ Example
- Qt 6.9.2 Reference Documentation

# Qt 3D: Basic Shapes C++ Example

Shows four basic shapes that Qt 3D offers and sets up a mesh for each of them.

Basic Shapes shows four basic shapes that Qt 3D offers: a torus, a cylinder, a cube, and a sphere. The example also shows how to embed a Qt 3D scene into a widget and connect with other widgets.

#### Running the Example

To run the example from Qt Creator, open the Welcome mode and select the example from Examples. For more information, see Qt Creator: Tutorial: Build and run.

#### Setting Up a Torus Mesh

As an example, we go through how to set up a torus mesh. First, we instantiate the `QTorusMesh`, and then we set the mesh specific parameters, which for torus are radius, minor radius, and the number of rings and slices.

     m_torus = new Qt3DExtras::QTorusMesh();
     m_torus->setRadius(1.0f);
     m_torus->setMinorRadius(0.4f);
     m_torus->setRings(100);
     m_torus->setSlices(20);

The size and position of the torus can be adjusted with transform components. We create scale, translation, and rotation components and add them into the `QTransform` component.

     Qt3DCore::QTransform *torusTransform = new Qt3DCore::QTransform();
     torusTransform->setScale(2.0f);
     torusTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 25.0f));
     torusTransform->setTranslation(QVector3D(5.0f, 4.0f, 0.0f));

To change the diffuse color of the mesh, we create a `QPhongMaterial` and set its diffuse color.

     Qt3DExtras::QPhongMaterial *torusMaterial = new Qt3DExtras::QPhongMaterial();
     torusMaterial->setDiffuse(QColor(QRgb(0xbeb32b)));

The final step is to add the torus into an entity tree, and we do that by creating a `QEntity` with a parent entity and adding the previously created mesh, material, and transform components into it.

     m_torusEntity = new Qt3DCore::QEntity(m_rootEntity);
     m_torusEntity->addComponent(m_torus);
     m_torusEntity->addComponent(torusMaterial);
     m_torusEntity->addComponent(torusTransform);

We can control the visibility of the entity by defining whether it has a parent or not. That is, whether it is part of an entity tree or not.

     void SceneModifier::enableTorus(bool enabled)
     {
         m_torusEntity->setEnabled(enabled);
     }

Example project @ code.qt.io