Creating a Mobile Application

import QtQuick 2.14
import QtQuick.Window 2.14
import QtSensors 5.12

Window {
    id: window
    visible: true
    property alias mainWindow: mainWindow
    property alias bubble: bubble
    Rectangle {
        id: mainWindow
        color: "#ffffff"
        anchors.fill: parent

        Bubble {
            id: bubble
            x: bubble.centerX - bubbleCenter
            y: bubble.centerY - bubbleCenter
            bubbleCenter: bubble.width /2
            centerX: mainWindow.width /2
            centerY: mainWindow.height /2

            Behavior on y {
                SmoothedAnimation {
                    easing.type: Easing.Linear
                    duration: 100
                }
            }
            Behavior on x {
                SmoothedAnimation {
                    easing.type: Easing.Linear
                    duration: 100
                }
            }
        }
    }

    Accelerometer {
       id: accel
       dataRate: 100
       active: true
       readonly property double radians_to_degrees: 180 / Math.PI

       onReadingChanged: {
           var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
           var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)

           if (isNaN(newX) || isNaN(newY))
               return;

           if (newX < 0)
               newX = 0

           if (newX > mainWindow.width - bubble.width)
               newX = mainWindow.width - bubble.width

           if (newY < 18)
               newY = 18

           if (newY > mainWindow.height - bubble.height)
               newY = mainWindow.height - bubble.height

           bubble.x = newX
           bubble.y = newY
       }
   }

    function calcPitch(x,y,z) {
        return -Math.atan2(y, Math.hypot(x, z)) * accel.radians_to_degrees;
    }
    function calcRoll(x,y,z) {
        return -Math.atan2(x, Math.hypot(y, z)) * accel.radians_to_degrees;
    }
}