Qt Bluetooth

Bluetooth API は Bluetooth 対応デバイス間の接続を提供します。

現在、この API は以下のプラットフォームでサポートされています:

API 機能アンドロイドiOSLinux(BlueZ 5.x)macOSWindows
クラシックBluetoothxxxx
ブルートゥースLEセントラルxxxxx
Bluetooth LE 周辺機器xxxx

概要

Bluetoothは短距離(100メートル以下)の無線技術である。データ転送速度は2.1Mbpsで、機器間のデータ転送に適している。Bluetooth接続は、デバイスのスキャン、デバイスの情報収集、デバイス間のデータ交換など、基本的なデバイス管理に基づいています。

Qt Bluetoothは、クライアント/セントラルロールのユースケース向けにBluetooth Low Energyの開発をサポートしています。詳細はBluetooth Low Energyの概要に記載されています。

モジュールの使用

Qt モジュールの C++ API を使用するには、モジュールライブラリを直接、または他の依存関係を介してリンクする必要があります。CMakeや qmakeなど、いくつかのビルドツールはこのための専用サポートを持っています。

CMake でのビルド

find_package() コマンドを使用して、必要なモジュール・コンポーネントをQt6 パッケージから探します:

find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(mytarget PRIVATE Qt6::Bluetooth)

詳細については、CMakeによるビルドの概要を参照してください。

qmakeでのビルド

モジュールをqmakeでビルドするように設定するには、プロジェクトの.proファイルにQT 変数の値としてモジュールを追加します:

QT += bluetooth

パーミッション

Qt 6.6 から、Qt Bluetooth モジュールはBluetooth のパーミッションを処理するために新しいQPermission API を使用します。つまり、Qt 自身がこれらのパーミッションの問い合わせをしなくなったので、クライアントアプリケーションから直接行う必要があります。

新しいQPermission API をアプリケーションに統合する方法の例については、Application Permissions のページを参照してください。

Qt Bluetooth のビルド

モジュールはすべての Qt プラットフォーム用にビルドできますが、モジュールはすべてのプラットフォームに移植されているわけではありません。サポートされていないプラットフォームでは、ダミーバックエンドが自動的に選択されます。ダミーバックエンドは適切なエラーメッセージと値を報告するので、実行時に現在のプラットフォームがサポートされていないことを検出することができます。Linux では、BlueZ 開発用ヘッダーがビルド時に見つからなかったり、Qt が Qt D-Bus をサポートせずにビルドされた場合にも、ダミーバックエンドが選択されます。

ダミーバックエンドの使用は、ビルド中と実行中に適切な警告によって強調表示されます。

Linux 特有

Qt 6.5 以降、Linux のペリフェラルサポートには 2 つのバックエンドがあります:BlueZ DBus と Bluetooth Kernel API です。DBus バックエンドは Qt 6.7 以降のデフォルトのバックエンドです。

BlueZ DBus は新しい BlueZ スタックで、おそらく古いカーネル API の最終的な後継となるでしょう。機能面では少し制限されていますが、一般的な使い方では問題にならないでしょう。DBusバックエンドを使うことの特筆すべき利点は、ユーザー・プロセスがCAP_NET_ADMIN能力を持つ必要がなくなることです(例えば、root ユーザーとして実行するなど)。

DBusバックエンドには、BlueZバージョン5.56以上と、必要なDBus APIが必要です。これらの要件が満たされない場合、Qt は自動的に Bluetooth Kernel API バックエンドにフォールバックします。

QT_BLUETOOTH_USE_KERNEL_PERIPHERAL環境変数を設定することで、手動で古いカーネルバックエンドを選択することもできます。

macOS固有

macOS の Bluetooth API は、Qt でQGuiApplication に依存する特定のタイプのイベントディスパッチャを必要とします。 しかし、環境変数QT_EVENT_DISPATCHER_CORE_FOUNDATION=1 を設定することで、この問題を回避することができます。

Classic Bluetooth を使用しないアプリケーションでは、CoreBluetooth (Bluetooth LE) がQApplicationQGuiApplication を必要としないため、QtBluetooth のサブセットが利用可能です。

記事とガイド

リファレンス

ログ・カテゴリー

QtBluetooth モジュールは以下のlogging categories をエクスポートします:

ロギングカテゴリー説明
qt.bluetoothのクロスプラットフォームのコードパスのロギングを有効にする。QtBluetooth
qt.bluetooth.androidAndroid実装のロギングを有効にする
qt.bluetooth.bluezBLuez/Linux 実装のロギングを有効にする
qt.bluetooth.iosiOS実装のロギングを有効にします
qt.bluetooth.osxmacOS実装のロギングを有効にする
qt.bluetooth.windowsWindows実装のロギングを有効にする

ロギングカテゴリを使用すると、QtBluetooth に対する追加の警告およびデバッグ出力が有効になります。ロギングの詳細については、QLoggingCategory を参照してください。QtBluetooth のロギングをすべて有効にする簡単な方法は、main() 関数に次の行を追加することです:

QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true"));

モジュールの進化

Qt Bluetooth の変更点には、Qt 6 シリーズで行われたモジュール API と機能の重要な変更が記載されています。

ライセンスと帰属

Qt Bluetooth はThe Qt Company の商用ライセンスで利用できます。また、GNU Lesser General Public License, version 3 またはGNU General Public License, version 2 の下でも利用可能です。詳細はQt Licensingを参照してください。

Linux では、Qt Bluetooth は公式の Linux bluetooth プロトコルスタック BlueZ と統合するために、sdpscanner という別の実行ファイルを使用します。BlueZ は、GNU General Public License バージョン 2 で提供されています。

BlueZ

GNU General Public License v2.0 のみ (これはユーザーコードに GPL を強制するものではありません。詳細は詳細を参照してください)。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。