QBluetoothSocket Class
QBluetoothSocket クラスを使用すると、Bluetooth サーバーを実行している Bluetooth デバイスへの接続が可能になります。詳細...
| ヘッダー: | #include <QBluetoothSocket> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Bluetooth) target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake: | QT += bluetooth |
| 継承元: | QIODevice |
パブリック型
| enum class | SocketError { UnknownSocketError, NoSocketError, HostNotFoundError, ServiceNotFoundError, NetworkError, …, MissingPermissionsError } |
| enum class | SocketState { UnconnectedState, ServiceLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState } |
パブリック関数
| QBluetoothSocket(QObject *parent = nullptr) | |
| QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr) | |
| virtual | ~QBluetoothSocket() |
| void | abort() |
| void | connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite) |
| void | connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite) |
| void | connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite) |
| void | disconnectFromService() |
| QBluetoothSocket::SocketError | error() const |
| QString | errorString() const |
| QBluetoothAddress | localAddress() const |
| QString | localName() const |
| quint16 | localPort() const |
| QBluetoothAddress | peerAddress() const |
| QString | peerName() const |
| quint16 | peerPort() const |
| QBluetooth::SecurityFlags | preferredSecurityFlags() const |
| void | setPreferredSecurityFlags(QBluetooth::SecurityFlags flags) |
| bool | setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite) |
| int | socketDescriptor() const |
| QBluetoothServiceInfo::Protocol | socketType() const |
| QBluetoothSocket::SocketState | state() const |
再実装されたパブリック関数
| virtual qint64 | bytesAvailable() const override |
| virtual qint64 | bytesToWrite() const override |
| virtual bool | canReadLine() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
シグナル
| void | connected() |
| void | disconnected() |
(since 6.2) void | errorOccurred(QBluetoothSocket::SocketError error) |
| void | stateChanged(QBluetoothSocket::SocketState state) |
protected 関数
| void | doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode) |
| void | setSocketError(QBluetoothSocket::SocketError error_) |
| void | setSocketState(QBluetoothSocket::SocketState state) |
再実装されたプロテクト関数
| virtual qint64 | readData(char *data, qint64 maxSize) override |
| virtual qint64 | writeData(const char *data, qint64 maxSize) override |
詳細な説明
QBluetoothSocket は、L2CAP とRFCOMM の 2 種類のソケットをサポートしています。
L2CAP は、低レベルのデータグラム指向の Bluetooth ソケットです。Android は、ソケット接続におけるL2CAP をサポートしていません。
RFCOMM は、信頼性の高いストリーム指向のソケットです。RFCOMM ソケットは、RS-232 シリアルポートをエミュレートします。
Bluetooth サービスへの接続を確立するには、適切なタイプのソケットを作成し、Bluetooth アドレスとポート番号を引数としてconnectToService() を呼び出します。接続が確立されると、QBluetoothSocket はconnected() シグナルを発行します。
プラットフォームでProtocol がサポートされていない場合、connectToService()を呼び出すとUnsupportedProtocolError エラーが発生します。
注:QBluetoothSocket は同期的な読み取りおよび書き込み操作をサポートしていません。waitForReadyRead() やwaitForBytesWritten() などの関数は実装されていません。I/O 操作は、readyRead()、read()、およびwrite() を使用して実行する必要があります。
iOS では、プラットフォーム側が QBluetoothSocket 関連の機能へのアクセスを許可する API を公開していないため、このクラスを使用することはできません。
注: macOS Monterey (12)では 、モーダルダイアログの実行中、またはイベント追跡モードに入った場合(例えば、ウィンドウの閉じるボタンを長押しした場合など)、ソケットのデータフローが一時停止します。この問題は macOS Sequoia (15) で修正されました。
メンバ型のドキュメント
enum class QBluetoothSocket::SocketError
この列挙型は、Bluetoothソケットのエラー種別を表します。
| 定数 | 値 | 説明 |
|---|---|---|
QBluetoothSocket::SocketError::UnknownSocketError | 1 | 不明なエラーが発生しました。 |
QBluetoothSocket::SocketError::NoSocketError | 0 | エラーはありません。テストに使用されます。 |
QBluetoothSocket::SocketError::HostNotFoundError | 3 | リモートホストが見つかりませんでした。 |
QBluetoothSocket::SocketError::ServiceNotFoundError | 4 | リモートホスト上でサービスの UUID が見つかりませんでした。 |
QBluetoothSocket::SocketError::NetworkError | 5 | ソケットからの読み取りまたは書き込みの試行でエラーが発生しました |
QBluetoothSocket::SocketError::UnsupportedProtocolError | 6 | このプラットフォームでは、Protocol はサポートされていません。 |
QBluetoothSocket::SocketError::OperationError | 7 | ソケットが操作を許可しない状態にある間に操作が試みられました。 |
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10) | 2 | リモートホストが接続を閉じました。 |
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4) | 8 | オペレーティング・システムが、ユーザーによって許可されていない権限を要求しています。 |
enum class QBluetoothSocket::SocketState
この列挙型は、Bluetoothソケットの状態を表します。
| 定数 | 値 | 説明 |
|---|---|---|
QBluetoothSocket::SocketState::UnconnectedState | 0 | ソケットは接続されていません。 |
QBluetoothSocket::SocketState::ServiceLookupState | 1 | ソケットが接続パラメータを照会しています。 |
QBluetoothSocket::SocketState::ConnectingState | 2 | ソケットがデバイスへの接続を試みています。 |
QBluetoothSocket::SocketState::ConnectedState | 3 | ソケットはデバイスに接続されています。 |
QBluetoothSocket::SocketState::BoundState | 4 | ソケットはローカルアドレスとポートにバインドされています。 |
QBluetoothSocket::SocketState::ClosingState | 5 | ソケットは接続されており、保留中のデータがすべてソケットに書き込まれると閉じられます。 |
QBluetoothSocket::SocketState::ListeningState | 6 | ソケットは着信接続を待機しています。 |
メンバ関数のドキュメント
[explicit] QBluetoothSocket::QBluetoothSocket(QObject *parent = nullptr)
parent を使用してBluetoothソケットを構築します。
[explicit] QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)
`socketType ` 型の Bluetooth ソケットを、parent で構築します。
[virtual noexcept] QBluetoothSocket::~QBluetoothSocket()
Bluetoothソケットを破棄します。
void QBluetoothSocket::abort()
現在の接続を中止し、ソケットをリセットします。disconnectFromService() とは異なり、この関数はソケットを直ちに閉じ、書き込みバッファ内の保留中のデータを破棄します。
注: Androidでは 、ソケットを中止するには Android スレッドとの非同期的なやり取りが必要です。そのため、関連する `disconnected()` および `stateChanged()` シグナルは、スレッドによる閉じ処理が完了するまで遅延されます。
disconnectFromService() およびclose()も参照してください 。
[override virtual] qint64 QBluetoothSocket::bytesAvailable() const
QIODevice::bytesAvailable() const を再実装します。
読み取り待ちの状態にある受信バイト数を返します。
bytesToWrite() およびread()も参照してください 。
[override virtual] qint64 QBluetoothSocket::bytesToWrite() const
QIODevice::bytesToWrite() const を再実装します。
書き込み待ちのバイト数を返します。これらのバイトは、制御がイベントループに戻った際に書き込まれます。
[override virtual] bool QBluetoothSocket::canReadLine() const
QIODevice::canReadLine() const を再実装します。
デバイスから少なくとも1行を読み込める場合はtrueを返す
[override virtual] void QBluetoothSocket::close()
QIODevice::close() を再実装します。
ソケットとデバイスとの接続を切断します。
注: Androidでは 、ソケットを閉じるには Android スレッドとの非同期的なやり取りが必要です。そのため、関連するdisconnected() およびstateChanged() シグナルは、スレッドによる閉じ処理が完了するまで遅延されます。
void QBluetoothSocket::connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite)
service で記述されているサービスへの接続を試みます。
指定されたopenMode でソケットが開かれます。service で異なるQBluetoothServiceInfo::socketProtocol()が指定されている場合、socketType()は無視されます。
ソケットはまずConnectingState 状態に入り、service を指定したデバイスへの接続を試みます。接続が確立されると、QBluetoothSocket はConnectedState 状態に入り、connected()を発信します。
どの時点でも、ソケットはerrorOccurred() を送信して、エラーが発生したことを通知することができます。
ほとんどのプラットフォームでは、リモートデバイスに接続する前にペアリングが必要であることに注意してください。そうしないと、接続処理が失敗する可能性があります。
Android では、RFCOMM 接続のみが可能です。この関数は、ソケットプロトコル指標をすべて無視し、RFCOMM であるとみなします。
state() およびdisconnectFromService()も参照してください 。
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite)
アドレスaddress のデバイス上で、uuid で指定されたサービスへの接続を試みます。
指定されたopenMode でソケットが開かれます。
BlueZ の場合、ソケットはまず `ServiceLookupState ` に入り、uuid の接続パラメータを照会します。サービスパラメータの取得に成功すると、ソケットは `ConnectingState` に入り、address への接続を試みます。接続が確立されると、QBluetoothSocket は `ConnectedState ` に入り、connected() を発行します。
Androidでは、リモートサービスのUUIDを使用してサービス接続を直接確立できます。そのため、プラットフォームはServiceLookupState を必要とせず、socketType()は常にQBluetoothServiceInfo::RfcommProtocol に設定されます。
ソケットは、いつでも `errorOccurred()` を発行して、エラーが発生したことを通知できます。
ほとんどのプラットフォームでは、リモートデバイスに接続する前にペアリングが必要である点に注意してください。そうしないと、接続処理が失敗する可能性があります。
state() およびdisconnectFromService()も参照してください 。
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
指定されたport に対して、address との接続を試みます。
指定されたopenMode でソケットが開かれます。
ソケットはまずConnectingState に入り、address への接続を試みます。接続が確立されると、QBluetoothSocket はConnectedState に入り、connected() を発行します。
どの時点でも、ソケットはerrorOccurred()を発行して、エラーが発生したことを通知できます。
Android および BlueZ(バージョン 5.46 以上)では、ポートを使用してサービスへの接続を確立することはできません。この関数を呼び出すと、ServiceNotFoundError が発行されます。
ほとんどのプラットフォームでは、リモートデバイスへの接続前にペアリングが必要であることに注意してください。そうしないと、接続処理が失敗する可能性があります。
state() およびdisconnectFromService()も参照してください 。
[signal] void QBluetoothSocket::connected()
このシグナルは、接続が確立されたときに発せられます。
QBluetoothSocket::SocketState::ConnectedState およびstateChanged()も参照してください 。
void QBluetoothSocket::disconnectFromService()
ソケットを閉じる試みを行います。書き込み待ちのデータがある場合、QBluetoothSocket はClosingState 状態に入り、すべてのデータが書き込まれるまで待機します。最終的に、UnconnectedState 状態に入り、disconnected()シグナルを発信します。
connectToService()も参照してください 。
[signal] void QBluetoothSocket::disconnected()
このシグナルは、ソケットが切断されたときに発生します。
QBluetoothSocket::SocketState::UnconnectedState およびstateChanged()も参照してください 。
[protected] void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)
service のデバイス検出を開始し、openMode でソケットを開きます。ソケットがサービスUUIDデバイスアドレスを使用して作成された場合は、サービス検出を使用して、接続先のポート番号を特定してください。
QBluetoothSocket::SocketError QBluetoothSocket::error() const
最後のエラーを返します。
[signal, since 6.2] void QBluetoothSocket::errorOccurred(QBluetoothSocket::SocketError error)
このシグナルは、error が発生したときに発火します。
この関数は Qt 6.2 で導入されました。
error()も参照してください 。
QString QBluetoothSocket::errorString() const
そのエラーについて、ユーザーが確認できるテキスト文字列を返します。
[override virtual] bool QBluetoothSocket::isSequential() const
QIODevice::isSequential() const を再実装します。
QBluetoothAddress QBluetoothSocket::localAddress() const
ローカルデバイスのアドレスを返します。
プラットフォームによっては異なる場合もありますが、一般的に、有効なアドレスが確実に返されるようにするには、ソケットを接続しておく必要があります。特に、複数のローカルBluetoothアダプタをサポートするプラットフォームを扱う場合は、この点が重要です。
QString QBluetoothSocket::localName() const
ローカルデバイスの名前を返します。
プラットフォームによっては異なる場合もありますが、一般的に、有効な名前が確実に返されるようにするには、ソケットを接続しておく必要があります。特に、複数のローカル Bluetooth アダプタをサポートするプラットフォームを扱う場合は、この点が当てはまります。
quint16 QBluetoothSocket::localPort() const
利用可能な場合はローカルソケットのポート番号を返し、そうでない場合は0を返します。プラットフォームによっては異なる場合もありますが、有効なポート番号が確実に返されるようにするには、通常、ソケットが接続されている必要があります。
Android および macOS では、この機能はサポートされておらず、0 が返されます。
QBluetoothAddress QBluetoothSocket::peerAddress() const
ピアデバイスのアドレスを返します。
QString QBluetoothSocket::peerName() const
ピアデバイスの名前を返します。
quint16 QBluetoothSocket::peerPort() const
利用可能な場合は、ピアソケットのポート番号を返します。利用できない場合は0を返します。Androidでは、この機能はサポートされていません。
QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const
最初の接続試行に使用されたセキュリティパラメータを返します。
セキュリティパラメータは、接続の確立中または確立後に、両者間で再ネゴシエーションされる場合があります。そのような変更があった場合でも、このフラグの値には反映されません。
macOS では、このフラグは常に `QBluetooth::Security::Secure` に設定されます。
setPreferredSecurityFlags()も参照してください 。
[override virtual protected] qint64 QBluetoothSocket::readData(char *data, qint64 maxSize)
QIODevice::readData (char *data, qint64 maxSize)を再実装します。
void QBluetoothSocket::setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)
接続試行の優先セキュリティパラメータを「flags 」に設定します。この値は、connectToService() を呼び出す際に反映されます。したがって、既存の接続においてこのパラメータを変更するには、再接続を行う必要があります。
LinuxのBlueZバックエンドでは、フラグはカーネルのセキュリティレベルにマッピングされます:
- QBluetooth::Security::Authorization
BT_SECURITY_LOWにマッピングされます; - QBluetooth::Security::Encryption
BT_SECURITY_MEDIUMにマッピングされます; - QBluetooth::Security::Secure
BT_SECURITY_HIGHにマッピングされます; - QBluetooth::Security::Authentication はカーネルでは使用されず、無視されます。
デフォルト値はQBluetooth::Security::Authorization です。
BlueZ D-Bus バックエンドを使用する Linux および Windows では、このフラグはサポートされておらず、無視されます。
macOS では、プラットフォームがソケットのセキュリティパラメータへのアクセスを許可していないため、この値は無視されます。ただし、デフォルトではプラットフォームはセキュアな接続または暗号化された接続を優先するため、この関数は常に `QBluetooth::Security::Secure` を返します。
Android は 2 段階のセキュリティレベル(セキュアと非セキュア)のみをサポートしています。このフラグが `QBluetooth::Security::NoSecurity ` に設定されている場合、ソケットオブジェクトは認証や暗号化を一切行いません。それ以外のセキュリティフラグの組み合わせでは、セキュアな Bluetooth 接続が確立されます。このフラグはデフォルトで `QBluetooth::Security::Secure ` に設定されています。
注: セキュアな接続には 、2つのデバイス間のペアリングが必要です。一部のプラットフォームでは、接続の確立中にペアリングが自動的に開始されます。その他のプラットフォームでは、接続を試みる前に、アプリケーションが手動でペアリングを開始する必要があります。
関連項目: preferredSecurityFlags()。
bool QBluetoothSocket::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
ソケットを、タイプが `socketType`、状態が `socketState`、モードが `openMode` の `socketDescriptor ` を使用するように設定します。
ソケット記述子はQBluetoothSocket インスタンスによって所有されており、処理が完了したら閉じることができます。
成功した場合は、true を返します。
socketDescriptor()も参照してください 。
[protected] void QBluetoothSocket::setSocketError(QBluetoothSocket::SocketError error_)
error_ に、最後に発生したエラーの種類を設定します。
[protected] void QBluetoothSocket::setSocketState(QBluetoothSocket::SocketState state)
ソケットの状態を「state 」に設定します。
int QBluetoothSocket::socketDescriptor() const
利用可能な場合、プラットフォーム固有のソケット記述子を返します。この関数は、記述子が利用できない場合やエラーが発生した場合は -1 を返します。
setSocketDescriptor()も参照してください 。
QBluetoothServiceInfo::Protocol QBluetoothSocket::socketType() const
ソケットのタイプを返します。ソケットは、リモートサービスが提供するプロトコルに合わせて自動的に調整されます。
Androidでは、RFCOMM ベースのソケットのみがサポートされています。
QBluetoothSocket::SocketState QBluetoothSocket::state() const
ソケットの現在の状態を返します。
[signal] void QBluetoothSocket::stateChanged(QBluetoothSocket::SocketState state)
このシグナルは、ソケットの状態が「state 」に変化したときに発生します。
connected()、disconnected()、state()、およびQBluetoothSocket::SocketStateも参照してください 。
[override virtual protected] qint64 QBluetoothSocket::writeData(const char *data, qint64 maxSize)
QIODevice::writeData(const char *data, qint64 maxSize) を再実装します。
© 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.