Qt Sensors C++の概要

センサータイプ

デバイスには多くの種類のセンサーがあります。Qt Sensors API がサポートするすべての型が利用できるとは限りません。また、Qt Sensors API で定義されていないタイプもあります。デバイスで利用可能なセンサーのタイプは、QSensor::sensorTypes() 関数を使用して調べます。

内蔵センサー・タイプのリストについては、以下の「センサー・クラス」セクションを参照してください。

共通規約

特に指定がない限り、Qt Sensors右手デカルト座標系を使用します。

6 方向すべての測定を可能にす る ために、 負の値が用い ら れます。

軸周りの回転が使用される場合、回転は右手回転として表現されなければならない。

一般的に、センサーデータは、QScreen::nativeOrientation に対して相対的な方向、すなわち、デバイスが自然な方向(通常、デバイスのロゴが右側に表示されるとき)に保持されたときのデバイスの上部に対して相対的な方向となる。値が画面上に表示される場合、値はユーザーインターフェースの方向と一致するように変換される 必要があるかもしれない。センサーはそのデータを UI 向けに定義することができる。これはセンサーのドキュメントに記載される。

センサーの使用

QSensor のライフサイクルは一般的に以下の通りです:

  • スタックまたはヒープ上にQSensor またはそのサブクラスのインスタンスを作成する。
  • アプリケーションの必要に応じてセットアップを行う。
  • 値の受信を開始。
  • センサーデータがアプリケーションによって使用される。
  • 値の受信を停止する。

以下はヒープとスタック上にセンサーを作成する例です。

// On the heap (deleted when this object is deleted)
QAccelerometer *sensor = new QAccelerometer(this);

// On the stack (deleted when the current scope ends)
QOrientationSensor orient_sensor;

一般的な方法でセンサーデータにアクセスする

センサデータを扱うのに好ましい方法は、読み取りクラスを経由することである。しかし、これが不可能な場合もあります。例えば、新しいセンサータイプを持つデバイスにアプリケーションをデプロイする場合、読み取りクラスを記述したC++ヘッダーが利用できないことがあります。

Qt のプロパティシステムのおかげで、センサーデータにアクセスすることができます。そのためには3つの情報を知っておく必要があります:

  • センサータイプ
  • プロパティ名またはインデックス
  • プロパティタイプ、または同等のタイプ

例えば、加速度センサーのプロパティにアクセスする方法の例を以下に示します。このコードは、QAccelerometer またはQAccelerometerReading へのコンパイル時リンクを必要としません。

// start the sensor
QSensor sensor("QAccelerometer");
sensor.start();

// later
QSensorReading *reading = sensor.reading();
qreal x = reading->property("x").value<qreal>();
qreal y = reading->value(1).value<qreal>();

この情報はすべて、実行時にも見つけることができます。

ランタイムでのセンサーの検出とプロパティの読み取り

開発時に利用可能なセンサーがわからないことがある。下図のように、利用可能なセンサーを見つけることができる:

QList<QSensor*>mySensorList;for(constQByteArray&typeQSensor(const &type::sensorTypes()) { センサーの種類を指定する。    qDebug() << "Found a sensor type:" << type;
   for(constQByteArray&identifierQSensor::sensorsForType(タイプ)) { { { (const &identifier ::sensorsForType(type))        qDebug() << "    " << "Found a sensor of that type:" << identifier;
        QSensor* sensor= newQSensor(type, this); sensor->setIdentifier(identifier); mySensorList.append(sensor); } }

さらに、以下に示すように、これらのセンサーの読み取りの詳細を発見することも可能である:

for(QSensor* sensor : mySensorList) {const intfirstProperty=::staticMetaObject QSensorReading::staticMetaObject.propertyOffset();// start() がまだ呼び出されていない場合に備えて、最初にバックエンドに接続する if(!sensor->connectToBackend())continueqDebug() << "Sensor" << sensor->identifier() << "reading properties:";
    QSensorReading*reading =  sensor->reading();if(reading) {constQMetaObject*mo =  reading->metaObject();for(inti=firstProperty; i<  mo->propertyCount();++i) { name = mo->property(i).            QByteArrayname=  mo->property(i).name();            qDebug() << "    " << name << reading->property(name).toByteArray();
        } }

フロントエンド、バックエンド

Qt Sensors APIには、アプリケーション開発者が使用するフロントエンドと、デバイス実装者がハードウェアにアクセスするためのコードを記述するバックエンドがあります。アプリケーション開発者としてバックエンドにアクセスする必要はありませんが、バックエンドがどのように動作するかを理解しておくと便利でしょう。

アプリケーションからのコマンドはQSensor 、デバイス・プラグインに送られます。データはQSensorReading クラスを通して戻ってきます。

バックエンドの詳細については、Qt Sensors Backendを参照してください。

メインクラス

Qt Sensors API を構成する主要なクラスです。

QSensor

単一のハードウェアセンサーを表す

QSensorFilter

センサーの変更を非同期で通知するための効率的なコールバック機能

QSensorReading

センサーからの読み取り値を保持

読み取りクラス

センサーデータにアクセスする最良の方法は、これらのクラスのいずれかを経由することです。

QAccelerometerReading

X軸、Y軸、Z軸に沿った直線加速度のレポート

QAmbientLightReading

環境光センサーからの1つの読み取り値を表す

QAmbientTemperatureReading

周囲温度の読み取り値を保持

QCompassReading

コンパスからの1つの読み取り値を表す

QGyroscopeReading

ジャイロセンサからの読み取り値1つ

QHumidityReading

湿度センサーの読み取り値を保持

QLightReading

光センサーからの読み取り値1つ

QMagnetometerReading

地磁気センサーからの読み取り値1つ

QOrientationReading

方位センサーからの読み取り値1つ

QPressureReading

圧力センサーからの読み取り値を保持

QProximityReading

近接センサーからの読み取り値1つを表します。

QRotationReading

回転センサーからの読み取り値1つ

QTiltReading

傾斜センサーからの読み取り値を保持

センサークラス

これらのクラスは、キャストの必要性を減らす便利なラッパーを提供します。これらのクラスはそれぞれ、Qt Sensors API が知っているセンサータイプを表します。実行時に追加の型が利用可能になる可能性があることに注意してください。詳細はセンサの種類を参照してください.

QAccelerometer

QSensor の便利なラッパー

QAmbientLightSensor

QSensor 周りの便利なラッパー

QAmbientTemperatureSensor

QSensor の周りのコンビニエンス・ラッパー

QCompass

QSensor周りのコンビニエンス・ラッパー

QGyroscope

QSensor(キューセンサー)周りのコンビニエンス・ラッパー

QHumiditySensor

QSensor(キューセンサー)周りのコンビニエンス・ラッパー

QLightSensor

QSensor(キューセンサー)周りのコンビニエンス・ラッパー

QMagnetometer

QSensor(キューセンサー)周りのコンビニエンス・ラッパー

QOrientationSensor

QSensor(キューセンサー)周りのコンビニエンス・ラッパー

QPressureSensor

QSensor(キューセンサー)周りのコンビニエンス・ラッパー

QProximitySensor

QSensor(キューセンサー)周りのコンビニエンス・ラッパー

QRotationSensor

QSensor(キューセンサー)周りのコンビニエンス・ラッパー

QTiltSensor

QSensorの周りのコンビニエンス・ラッパー

フィルタークラス

センサクラスと同様に、これらはキャストの必要性を減らす便利なラッパーを提供します。

QAccelerometerFilter

QSensorFilter の簡易ラッパー

QAmbientLightFilter

QSensorFilter のコンビニエンス・ラッパー

QAmbientTemperatureFilter

QSensorFilter 周りのコンビニエンス・ラッパー

QCompassFilter

QSensorFilter の周りの便利なラッパー

QGyroscopeFilter

QSensorFilterの周りのコンビニエンス・ラッパー

QHumidityFilter

QSensorFilterの周りのコンビニエンス・ラッパー

QLightFilter

QSensorFilterの周りのコンビニエンス・ラッパー

QMagnetometerFilter

QSensorFilterの周りのコンビニエンス・ラッパー

QOrientationFilter

QSensorFilterの周りのコンビニエンス・ラッパー

QPressureFilter

QSensorFilterの周りのコンビニエンス・ラッパー

QProximityFilter

QSensorFilterの周りのコンビニエンス・ラッパー

QRotationFilter

QSensorFilterの周りのコンビニエンス・ラッパー

QTiltFilter

QSensorFilter周りのコンビニエンス・ラッパー

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