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;汎用的な方法でセンサーデータにアクセスする
センサーデータの処理には、Readingクラスを使用するのが推奨されます。ただし、それが不可能な場合もあります。たとえば、新しいセンサータイプを搭載したデバイスにアプリケーションをデプロイする場合でも、その読み取りクラスを記述した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&type: QSensor::sensorTypes()) {
qDebug() << "Found a sensor type:" << type;
for(constQByteArray&identifier: QSensor::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=QSensorReading::staticMetaObject.propertyOffset();
// start() がまだ呼び出されていない場合に備えて、まずバックエンドに接続する
if(!sensor->connectToBackend())
continue;
qDebug() << "Sensor" << sensor->identifier() << "reading properties:";
QSensorReading*reading = sensor->reading();
if(reading) {
constQMetaObject*mo = reading->metaObject();
for(inti=firstProperty; i< mo->propertyCount();++i) {
QByteArray name= mo->property(i).name();
qDebug() << " " << name << reading->property(name).toByteArray();
}
}
}フロントエンド、バックエンド
Qt Sensors API には、アプリケーション開発者が使用するフロントエンドと、デバイス実装者がハードウェアにアクセスするためのコードを記述するバックエンドがあります。アプリケーション開発者としては、バックエンドにアクセスする必要はありませんが、その仕組みを理解しておくと役立つ場合があります。
アプリケーションからのコマンドは、QSensor を経由してデバイスプラグインに送信されます。データは、QSensorReading クラスを通じて返されます。

バックエンドに関する詳細については、「Qt Sensors Backend」を参照してください。
主なクラス
Qt Sensors APIを構成する主要なクラスです。
単一のハードウェアセンサーを表します | |
センサーの変化を非同期で通知するための効率的なコールバック機能 | |
センサーからの測定値を保持します |
読み取りクラス
センサーデータにアクセスするには、これらのクラスのいずれかを使用するのが最適です。
X、Y、Z軸に沿った直線加速度に関する情報を報告します | |
周囲光センサーからの1回の測定値を表します | |
周囲温度の測定値を保持します | |
コンパスからの1回の測定値を表します | |
ジャイロセンサーからの1回の測定値を表します | |
湿度センサーからの測定値を保持します | |
光センサーからの1回の測定値を表します | |
磁力計からの測定値1つを表します | |
姿勢センサーからの1回の測定値を表します | |
気圧センサーからの測定値を保持します | |
近接センサーからの1回の測定値を表します | |
回転センサーからの1回の測定値を表します | |
傾斜センサーからの測定値を保持します |
センサクラス
これらのクラスは、型変換の必要性を軽減する便利なラッパーを提供します。各クラスは、Qt Sensors API が認識するセンサータイプを表しています。なお、実行時に追加のタイプが利用可能になる場合があります。詳細については、「センサータイプ」を参照してください。
QSensorをラップした便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor をラップした便利なラッパー | |
QSensor 用の便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor用の便利なラッパー | |
QSensor用の便利なラッパー |
フィルタクラス
センサクラスと同様に、これらは型変換の必要性を減らす便利なラッパーを提供します。
QSensorFilter をラップした便利なラッパー | |
QSensorFilter をラップした便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter を包む便利なラッパー | |
QSensorFilter 用の便利なラッパー | |
QSensorFilter 用の便利なラッパー |
© 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.