Revision control
Copy as Markdown
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtSensors
Item {
id: root
required property int fontSize
required property int imageSize
function resetRotations() : void
{
imageXRotation.angle = 0
imageYRotation.angle = 0
imageZRotation.angle = 0
}
//! [0]
Gyroscope {
id: gyroscope
property var lastTimeStamp: 0
property real x: 0
property real y: 0
property real z: 0
active: true
dataRate: 25
onReadingChanged: {
x = (reading as GyroscopeReading).x
y = (reading as GyroscopeReading).y
z = (reading as GyroscopeReading).z
let firstCall = false
if (lastTimeStamp == 0) {
firstCall = true
}
let timeSinceLast = reading.timestamp - lastTimeStamp
lastTimeStamp = reading.timestamp
//Skipping the initial time jump from 0
if (firstCall === true)
return
let normalizedX = x * (timeSinceLast / 1000000)
imageXRotation.angle += normalizedX
let normalizedY = y * (timeSinceLast / 1000000)
imageYRotation.angle -= normalizedY
let normalizedZ = z * (timeSinceLast / 1000000)
imageZRotation.angle += normalizedZ
}
}
//! [0]
ColumnLayout {
id: layout
anchors.fill: parent
spacing: 10
Image {
id: image
Layout.alignment: Qt.AlignHCenter
Layout.fillHeight: true
Layout.preferredWidth: root.imageSize
fillMode: Image.PreserveAspectFit
source: "images/qt_logo.png"
transform: [
Rotation {
id: imageXRotation
angle: 0
axis.x: 1
axis.y: 0
axis.z: 0
origin.x: layout.width / 2
origin.y: layout.height / 3
},
Rotation {
id: imageYRotation
angle: 0
axis.x: 0
axis.y: 1
axis.z: 0
origin.x: layout.width / 2
origin.y: layout.height / 3
},
Rotation {
id: imageZRotation
angle: 0
axis.x: 0
axis.y: 0
axis.z: 1
origin.x: layout.width / 2
origin.y: layout.height / 3
}
]
}
ProgressXYZBar {
Layout.fillWidth: true
Layout.topMargin: 20
fontSize: root.fontSize
xText: "X: " + gyroscope.x.toFixed(2)
xValue: 0.5 + (gyroscope.x / 1000)
yText: "Y: " + gyroscope.y.toFixed(2)
yValue: 0.5 + (gyroscope.y / 1000)
zText: "Z: " + gyroscope.z.toFixed(2)
zValue: 0.5 + (gyroscope.z / 1000)
}
Button {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: 20
Layout.bottomMargin: 10
Layout.preferredWidth: parent.width / 2
Layout.preferredHeight: 60
onClicked: root.resetRotations()
text: "Reset rotation"
}
}
}