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;
      }
  }