QBluetoothSocket Class
QBluetoothSocketクラスは、ブルートゥース・サーバーを実行しているブルートゥース・デバイスへの接続を可能にします。詳細...
Header: | #include <QBluetoothSocket> |
qmake: | QT += bluetooth |
Inherits: | 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) |
保護された関数
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は2つのソケットタイプ、L2CAP とRFCOMM をサポートしています。
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の将来のリリースで変更される可能性がある。
メンバ型ドキュメント
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)
Bluetooth ソケットをparent で構築する。
[explicit]
QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)
parent で、socketType 型の Bluetooth ソケットを構築する。
[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.
デバイスから少なくとも一行読み込める場合に 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 でソケットをオープンする。 service uuid デバイスアドレスでソケットが作成された場合は、service discovery を使用して接続先のポート番号を見つける。
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() を呼び出すときに組み込まれる。したがって、既存の接続でこのパラメータを変更するには、再接続する必要がある。
Bluez では、このプロパティはデフォルトでQBluetooth::Security::Authorization に設定されています。
macOS では、プラットフォームがソケットのセキュリティパラメータへのアクセスを許可しないため、この値は無視される。デフォルトでは、プラットフォームは安全で暗号化された接続を好むため、この関数は常にQBluetooth::Security::Secure を返す。
Androidは2つのセキュリティレベル(secureとnon-secure)しかサポートしていない。このフラグを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)
socketDescriptor を使用するようにソケットを設定する。タイプはsocketType で、状態はsocketState で、モードはopenMode である。
ソケットディスクリプタは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).
© 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.