Qt Quick 3D - HelloCube Example

 // Copyright (C) 2019 The Qt Company Ltd.
 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

 import QtQuick
 import QtQuick3D

 Window {
     id: window
     width: 640
     height: 640
     visible: true
     color: "black"

     Item {
         id: qt_logo
         width: 230
         height: 230
         anchors.top: parent.top
         anchors.left: parent.left
         anchors.margins: 10

         layer.enabled: true

         Rectangle {
             anchors.fill: parent
             color: "black"
             Image {
                 anchors.fill: parent
                 source: "qt_logo.png"
             }
             Text {
                 anchors.bottom: parent.bottom
                 anchors.left: parent.left
                 color: "white"
                 font.pixelSize: 17
                 text: qsTr("The Future is Written with Qt")
             }

             transform: Rotation {
                 id: rotation
                 origin.x: qt_logo.width / 2
                 origin.y: qt_logo.height / 2
                 axis { x: 1; y: 0; z: 0 }
             }

             PropertyAnimation {
                 id: flip1
                 target: rotation
                 property: "angle"
                 duration: 600
                 to: 180
                 from: 0
             }
             PropertyAnimation {
                 id: flip2
                 target: rotation
                 property: "angle"
                 duration: 600
                 to: 360
                 from: 180
             }
         }
     }

     View3D {
         id: view
         anchors.fill: parent

         PerspectiveCamera {
             position: Qt.vector3d(0, 200, 300)
             eulerRotation.x: -30
         }

         DirectionalLight {
             eulerRotation.x: -30
         }

         Model {
             id: cube
             source: "#Cube"
             materials: DefaultMaterial {
                 diffuseMap: Texture {
                     sourceItem: qt_logo
                 }
             }
             eulerRotation.y: 90

             Vector3dAnimation on eulerRotation {
                 loops: Animation.Infinite
                 duration: 5000
                 from: Qt.vector3d(0, 0, 0)
                 to: Qt.vector3d(360, 0, 360)
             }
         }
     }

     MouseArea {
         id: mouseArea
         anchors.fill: qt_logo

         Text {
             id: clickme
             anchors.top: mouseArea.top
             anchors.horizontalCenter: mouseArea.horizontalCenter
             font.pixelSize: 17
             text: "Click me!"

             SequentialAnimation on color {
                 loops: Animation.Infinite
                 ColorAnimation { duration: 400; from: "white"; to: "black" }
                 ColorAnimation { duration: 400; from: "black"; to: "white" }
             }

             states: [
                 State {
                     name: "flipped";
                     AnchorChanges {
                         target: clickme
                         anchors.top: undefined
                         // QTBUG-101364
                         anchors.bottom: mouseArea.bottom // qmllint disable incompatible-type
                     }
                 }
             ]
         }

         onClicked: {
             if (clickme.state == "flipped") {
                 clickme.state = "";
                 flip2.start();
             } else {
                 clickme.state = "flipped";
                 flip1.start();
             }
         }
     }
 }