Sensoren Showcase

Das Beispiel "Sensors Showcase" demonstriert die Verwendung von Sensoren anhand visueller Beispiele.

Übersicht

Beim Start zeigt die Anwendung ein Menü mit Schaltflächen für die Unteransichten der einzelnen Sensoren an. Die Sensoransichten instanziieren den gegebenen Sensor, zeigen die Sensorwerte als Zahlen an und visualisieren sie auch mit einer einfachen grafischen Darstellung.

Die Hauptansicht zeigt den Titel mit dem Namen der Anwendung und eine Schaltfläche für jede Unteransicht, die gleichmäßig durch ein ColumnLayout angeordnet ist. StackView verwaltet die Navigation zwischen den Unteransichten und dem Hauptmenü. Die Anwendung prüft beim Start die Verfügbarkeit der Sensoren und deaktiviert die Schaltflächen für die Sensoren, die nicht verfügbar sind.

Hinweis: Um das Beispiel zu vereinfachen, wird die Verfügbarkeit der Sensoren nur einmal während des Starts geprüft.

Beschleunigungsmesser-Ansicht

Die Beschleunigungsmesser-Ansicht zeigt die aktuellen Beschleunigungswerte des Geräts an und bewegt sich um ein Bild mit einem Betrag, der der Gerätebeschleunigung entgegengesetzt ist, wodurch das Bild einen Trägheitseffekt erhält, der proportional zur Bewegung des Geräts ist.

Das Bewegen des Bildes erfolgt mit der Beschleunigungsmessermethode onReadingChanged.

Accelerometer {
    id: accelerometer

    property real x: 0
    property real y: 0
    property real z: 0

    active: true
    dataRate: 25

    onReadingChanged: {
        x = (reading as AccelerometerReading).x
        y = (reading as AccelerometerReading).y
        z = (reading as AccelerometerReading).z
        imageTranslation.x = -x * 10
        imageTranslation.y = y * 10
    }
}

Bei jedem neuen Beschleunigungsmesserwert werden die Koordinaten der Bildverschiebung entsprechend aktualisiert.

Annäherungsansicht

Die Annäherungsansicht zeigt ein Bild, das vergrößert wird, wenn der Annäherungssensor des Geräts verdeckt wird.

Kompass-Ansicht

Die Kompassansicht zeigt ein Kompassbild, das entsprechend dem Messwert des Kompasssensors gedreht wird, so dass sich der Kompass nach Norden dreht.

Magnetometer-Ansicht

In der Magnetometeransicht wird ein Magnetbild angezeigt, das um einen Betrag gedreht wird, der durch den Drehwinkel des Vektors bestimmt wird, der durch die x- und y-Magnetometerwerte gegeben ist. Dies ergibt im Allgemeinen die gleiche Drehung wie die des Kompasses, was einen Anwendungsfall für die Nutzung der Magnetometermesswerte darstellt. Da das Magnetometer Messwerte entlang aller drei Achsen liefert, gibt es mehr Freiheiten, wie diese Messwerte verwendet werden können.

Magnetometer {
    id: magnetometer
    active: true
    dataRate: 25
    onReadingChanged: {
        root.magnetometerX = (reading as MagnetometerReading).x
        root.magnetometerY = (reading as MagnetometerReading).y
        root.magnetometerZ = (reading as MagnetometerReading).z
        root.magnetRotation =
            ((Math.atan2(root.magnetometerX, root.magnetometerY) / Math.PI) * 180)
    }
}

Gyroskop-Ansicht

Die Gyroskopansicht zeigt ebenfalls ein um drei Achsen gedrehtes Bild mit einem aus den Gyroskopmesswerten berechneten Betrag. Da das Gyroskop eine relative Drehung um die drei räumlichen Achsen liefert und die Zeit zwischen den Messwertaktualisierungen variieren kann, wird die Zeit der Messwerte gespeichert und die Drehung auf der Grundlage der zwischen den Messwertaktualisierungen verstrichenen Zeit normalisiert.

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

Durch Drücken der Reset-Taste wird die Bilddrehung auf 0 zurückgesetzt.

Beispielprojekt @ code.qt.io

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.