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)では、モーダルダイアログの実行中や、イベントトラッキングモードに入った場合(Windowを閉じるボタンの長押しなど)、ソケットのデータフローは一時停止されます。これは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
この enum は 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)
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
再リプルメント: () 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
相手ソケットのポート番号を返します。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) を再実装する。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。