Sur cette page

Présentation des capteurs

L'exemple « Vitrine des capteurs » illustre l'utilisation des capteurs à l'aide d'exemples visuels.

Menu principal de « Sensors Showcase » comportant des boutons pour l'accéléromètre, le capteur de proximité, la boussole, le magnétomètre et le gyroscope, le capteur de proximité étant désactivé

Présentation

Au démarrage, l'application affiche un menu comportant des boutons correspondant aux sous-vues de chaque capteur. Les vues de capteur instancient le capteur spécifié, affichent ses valeurs sous forme de chiffres et les visualisent également à l'aide d'une représentation graphique simple.

La vue principale affiche le titre avec le nom de l’application et un bouton pour chaque sous-vue, disposés de manière uniforme à l’aide d’un élément « ColumnLayout ». Un « StackView » gère la navigation entre les sous-vues et le menu principal. L’application vérifie la disponibilité des capteurs au démarrage et désactive les boutons correspondant aux capteurs indisponibles.

Remarque : pour simplifier l’exemple, la disponibilité des capteurs n’est vérifiée qu’une seule fois au démarrage.

Vue de l’accéléromètre

La vue de l’accéléromètre affiche les valeurs actuelles d’accélération de l’appareil et déplace l’image d’une amplitude opposée à l’accélération de l’appareil, ce qui confère à l’image un effet d’inertie proportionnel au mouvement de l’appareil.

Le déplacement de l’image s’effectue dans la méthode ` onReadingChanged ` de l’accéléromètre.

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

Chaque fois qu’une nouvelle valeur de l’accéléromètre est disponible, les coordonnées de translation de l’image sont mises à jour en conséquence.

Vue « Proximité »

La vue « Proximité » affiche une image qui s'agrandit dès que le capteur de proximité de l'appareil est recouvert.

Affichage de la boussole

La vue « boussole » affiche une image de boussole qui pivote en fonction de la valeur relevée par le capteur de boussole, de sorte que la boussole s'oriente vers le nord.

Vue « Magnétomètre »

La vue « Magnétomètre » affiche une image d’aimant qui pivote selon un angle déterminé par la rotation du vecteur défini par les valeurs x et y du magnétomètre. Cela se traduit généralement par la même rotation que celle indiquée par la boussole, illustrant ainsi un cas d’utilisation des mesures du magnétomètre. Comme le magnétomètre fournit des mesures sur les trois axes, cela offre davantage de liberté quant à la manière dont ces mesures peuvent être exploitées.

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

Vue du gyroscope

Vue du gyroscope affichant un logo Qt pivoté, avec des curseurs pour les valeurs X, Y et Z, ainsi qu'un bouton « Réinitialiser la rotation »

La vue du gyroscope affiche également une image pivotée autour des trois axes selon un angle calculé à partir des mesures du gyroscope. Comme le gyroscope fournit des variations de rotation relatives autour des trois axes spatiaux et que l'intervalle entre les mises à jour des mesures peut varier, l'heure des mesures est enregistrée et la variation de rotation est normalisée en fonction du temps écoulé entre les mises à jour.

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

En appuyant sur le bouton de réinitialisation, la rotation de l'image est remise à 0.

Exemple de projet sur 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.