En esta página

Escaparate de sensores

El ejemplo Sensors Showcase muestra el uso de sensores con ejemplos visuales.

Vista general

Al inicio, la aplicación muestra un menú con botones para las subvistas de cada sensor. Las vistas de sensor instancian el sensor dado, muestran los valores del sensor como números, y también los visualizan con una representación gráfica simple.

La vista principal muestra el título con el nombre de la aplicación y un botón para cada subvista distribuido uniformemente por un ColumnLayout. Un StackView gestiona la navegación entre las subvistas y el menú principal. La aplicación comprueba la disponibilidad de los sensores durante el arranque y desactiva los botones de los sensores que no están disponibles.

Nota: Para simplificar el ejemplo, la disponibilidad de los sensores se comprueba sólo una vez durante el arranque.

Vista del acelerómetro

La vista del acelerómetro muestra los valores actuales de aceleración del dispositivo y se mueve alrededor de una imagen con una cantidad que es opuesta a la aceleración del dispositivo dando a la imagen un efecto de inercia que es proporcional al movimiento del dispositivo.

El movimiento alrededor de la imagen se produce en el método del acelerómetro 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
    }
}

Cada vez que hay un nuevo valor del acelerómetro, las coordenadas de traslación de la imagen se actualizan en consecuencia.

Vista de proximidad

La vista de proximidad muestra una imagen que se amplía cada vez que se cubre el sensor de proximidad del dispositivo.

Vista de brújula

La vista de brújula muestra una imagen de brújula que se gira según el valor de lectura del sensor de brújula haciendo que la brújula gire hacia el norte.

Vista del magnetómetro

La vista del magnetómetro muestra una imagen del imán que se gira alrededor de una cantidad que se decide por el ángulo de rotación del vector dado por los valores x e y del magnetómetro. Esto resulta en general en la misma rotación que da la brújula, demostrando un caso de uso de cómo se pueden utilizar las lecturas del magnetómetro. Dado que el magnetómetro proporciona lecturas a lo largo de los tres ejes, hay más libertad con la forma en que estas lecturas se pueden utilizar.

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

Vista del giroscopio

La vista del giroscopio también muestra una imagen que se gira alrededor de tres ejes con una cantidad que se calcula a partir de las lecturas del giroscopio. Puesto que el giroscopio proporciona un cambio relativo de rotación alrededor de los tres ejes espaciales y el tiempo entre actualizaciones de lectura puede variar, el tiempo de las lecturas se almacena y el cambio de rotación se normaliza basándose en el tiempo transcurrido entre actualizaciones de lectura.

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

Pulsando el botón de reinicio la rotación de la imagen se reinicia a 0.

Proyecto de ejemplo @ code.qt.io

© 2026 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.