이 페이지에서

센서 쇼케이스

'센서 쇼케이스' 예제는 시각적인 예시를 통해 센서 사용법을 보여줍니다.

가속도계, 근접 센서, 나침반, 자력계, 자이로스코프 버튼이 있는 ‘센서 쇼케이스’ 메인 메뉴. 근접 센서는 비활성화되어 있음

개요

응용 프로그램이 시작되면 각 센서의 하위 뷰에 대한 버튼이 포함된 메뉴가 표시됩니다. 센서 뷰는 지정된 센서를 인스턴스화하고, 센서의 값을 숫자로 표시하며, 간단한 그래픽을 통해 시각화합니다.

메인 뷰에는 애플리케이션 이름이 포함된 제목과, 레이아웃 컨트롤( ColumnLayout)을 통해 균등하게 배치된 각 하위 뷰에 대한 버튼이 표시됩니다. StackView 가 하위 뷰와 메인 메뉴 간의 탐색을 관리합니다. 애플리케이션은 시작 시 센서의 사용 가능 여부를 확인하고, 사용할 수 없는 센서에 대한 버튼을 비활성화합니다.

참고: 예제를 단순화하기위해 센서 가용성 확인은 시작 시 한 번만 수행됩니다.

가속도계 뷰

가속도계 뷰는 기기의 현재 가속도 값을 표시하며, 기기의 가속도와 반대 방향으로 이미지를 이동시켜 기기의 움직임에 비례하는 관성 효과를 이미지에 부여합니다.

이미지의 이동 처리는 가속도계 뷰의 ` 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
    }
}

새로운 가속도계 값이 있을 때마다 이미지 변환 좌표가 그에 따라 업데이트됩니다.

근접 센서 뷰

근접 센서 뷰는 기기의 근접 센서가 가려질 때마다 이미지가 확대되어 표시됩니다.

나침반 보기

나침반 보기는 나침반 센서의 측정값에 따라 회전하여 나침반이 북쪽을 향하도록 하는 나침반 이미지를 표시합니다.

자력계 보기

자력계 보기는 x 및 y 자력계 값으로 주어진 벡터의 회전 각도에 따라 결정된 각도만큼 회전하는 자석 이미지를 표시합니다. 이는 일반적으로 나침반이 보여주는 회전과 동일한 결과를 나타내며, 자력계 측정값을 활용할 수 있는 한 가지 사용 사례를 보여줍니다. 자력계는 세 축 모두에 대한 측정값을 제공하므로, 이러한 측정값을 활용하는 데 있어 더 많은 자유도가 있습니다.

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

자이로스코프 보기

X, Y, Z 값 슬라이더와 ‘회전 초기화’ 버튼이 있는, 회전된 Qt 로고가 표시된 자이로스코프 뷰

자이로스코프 뷰는 자이로스코프 측정값을 바탕으로 계산된 각도로 세 축을 중심으로 회전된 이미지를 보여줍니다. 자이로스코프는 3개의 공간 축을 중심으로 한 상대적 회전 변화를 제공하며, 측정값 업데이트 간격이 달라질 수 있으므로 측정 시점이 저장되고, 측정값 업데이트 간 경과 시간을 기준으로 회전 변화가 정규화됩니다.

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으로 재설정됩니다.

예제 프로젝트 @ 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.