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つのソケットタイプ、L2CAPRFCOMM をサポートしています。

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::UnknownSocketError1不明なエラーが発生しました。
QBluetoothSocket::SocketError::NoSocketError0エラーなし。テストに使用されます。
QBluetoothSocket::SocketError::HostNotFoundError3リモート・ホストが見つかりませんでした。
QBluetoothSocket::SocketError::ServiceNotFoundError4リモートホストのサービス UUID が見つかりませんでした。
QBluetoothSocket::SocketError::NetworkError5ソケットから読み取りまたは書き込みを試みると、エラーが返されました。
QBluetoothSocket::SocketError::UnsupportedProtocolError6Protocol はこのプラットフォームではサポートされていません。
QBluetoothSocket::SocketError::OperationError7ソケットが許可されていない状態で操作を試みた。
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10)2リモートホストが接続を閉じました。
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4)8オペレーティングシステムがユーザに許可されていないパーミッションを要求した。

enum class QBluetoothSocket::SocketState

この enum は Bluetooth ソケットの状態を記述する。

定数説明
QBluetoothSocket::SocketState::UnconnectedState0ソケットは接続されていない。
QBluetoothSocket::SocketState::ServiceLookupState1ソケットは接続パラメータを問い合わせ中です。
QBluetoothSocket::SocketState::ConnectingState2ソケットがデバイスに接続しようとしています。
QBluetoothSocket::SocketState::ConnectedState3ソケットがデバイスに接続されている。
QBluetoothSocket::SocketState::BoundState4ソケットはローカル・アドレスとポートにバインドされています。
QBluetoothSocket::SocketState::ClosingState5ソケットは接続されており、保留中のデータがすべて書き込まれるとクローズされる。
QBluetoothSocket::SocketState::ListeningState6ソケットは着信接続を待ち受けている。

メンバー関数ドキュメント

[explicit] QBluetoothSocket::QBluetoothSocket(QObject *parent = nullptr)

parent の Bluetooth ソケットを構築する。

[explicit] QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)

parentsocketType 型の 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 を提供するデバイスへの接続を試みる。接続が確立すると、QBluetoothSocketConnectedState に入り、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 への接続を試みる。 接続が確立すると、QBluetoothSocketConnectedState に入り、connected() を発信する。

Androidでは、リモートサービスのUUIDを使って直接サービス接続を確立できる。そのため、このプラットフォームではServiceLookupState は不要であり、socketType() は常にQBluetoothServiceInfo::RfcommProtocol に設定される。

どの時点でも、ソケットはerrorOccurred() を発信してエラーが発生したことを知らせることができる。

ほとんどのプラットフォームでは、リモートデバイスに接続する前にペアリングが必要である。そうしないと接続に失敗する。

state() とdisconnectFromService()も参照の こと。

void QBluetoothSocket::connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)

与えられたportaddress との接続を試みる。

ソケットは与えられたopenMode でオープンされる。

ConnectingState address接続が確立すると、QBluetoothSocketConnectedState に入り、connected() を発信する。

どの時点でも、ソケットはerrorOccurred() を発信してエラーが発生したことを知らせることができる。

AndroidおよびBlueZ(バージョン5.46以上)では、ポートを使用してサービスへの接続を確立することはできない。この関数を呼び出すと、ServiceNotFoundError

ほとんどのプラットフォームでは、リモート・デバイスに接続する前にペアリングが必要です。そうしないと、接続プロセスが失敗する可能性がある。

state() およびdisconnectFromService()も参照のこと

[signal] void QBluetoothSocket::connected()

このシグナルは、接続が確立されたときに発せられる。

QBluetoothSocket::SocketState::ConnectedState およびstateChanged() も参照の こと。

void QBluetoothSocket::disconnectFromService()

ソケットをクローズしようとする。書き込み待ちの保留データがある場合、QBluetoothSocketClosingState に入り、すべてのデータが書き込まれるまで待つ。最終的には、UnconnectedState に入り、disconnected() シグナルを発する。

connectToService()も参照のこと

[signal] void QBluetoothSocket::disconnected()

このシグナルはソケットが切断されたときに発せられる。

QBluetoothSocket::SocketState::UnconnectedStatestateChanged() も参照の こと。

[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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。