QBluetoothSocket 类
QBluetoothSocket 类允许连接到运行蓝牙服务器的蓝牙设备。 更多...
头文件 | #include <QBluetoothSocket> |
qmake | QT += bluetooth |
继承 | QIODevice |
公共类型
枚举类 | SocketError { UnknownSocketError, NoSocketError, HostNotFoundError, ServiceNotFoundError, NetworkError, …, MissingPermissionsError } |
枚举类 | SocketState { UnconnectedState, ServiceLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState } |
公共函数
QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr) | |
QBluetoothSocket(QObject *parent = nullptr) | |
虚拟 | ~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 |
重实现的公共函数
虚拟 | bytesAvailable() const override |
虚拟 | bytesToWrite() const override |
虚拟 | canReadLine() const override |
虚拟 | close() override |
虚拟 | isSequential() const override |
信号
void | 连接() |
void | 断开连接() |
(自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) |
重写的保护函数
虚拟 | readData(char *data, qint64 maxSize) override |
虚拟 | writeData(const char *data, qint64 maxSize) override |
详细信息
QBluetoothSocket 支持两种套接字类型,L2CAP 和 RFCOMM。
L2CAP 是一种低级数据报式蓝牙套接字。Android 不支持套接字连接上的 L2CAP。
RFCOMM 是一种可靠、面向流的套接字。RFCOMM 套接字模拟 RS-232 串行端口。
要创建到蓝牙服务的连接,创建相应类型的套接字并调用 connectToService(),传入蓝牙地址和端口号。当连接建立时,QBluetoothSocket 会发出 connected() 信号。
如果平台不支持 Protocol,则调用 connectToService() 将发出 UnsupportedProtocolError 错误。
注意:QBluetoothSocket 不支持同步读写操作。如 waitForReadyRead() 和 waitForBytesWritten() 这样的函数未实现。I/O 操作应使用 readyRead()、read() 和 write 进行。
在 iOS 上,不能使用此类,因为平台没有公开允许访问 QBluetoothSocket 相关功能的 API。
注意:在 macOS Monterey (12) 上,当正在执行模态对话框或在事件跟踪模式下(例如,通过长按窗口关闭按钮)时,套接字数据流会暂停。这可能在 macOS 的未来版本中发生变化。
成员类型文档
枚举类 QBluetoothSocket::SocketError
此枚举描述蓝牙套接字错误类型。
常量 | 值 | 描述 |
---|---|---|
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 (自 Qt 5.10) | 2 | 远程主机关闭了连接。 |
QBluetoothSocket::SocketError::MissingPermissionsError (自 Qt 6.4) | 8 | 操作系统请求的权限没有被用户授予。 |
枚举类 QBluetoothSocket::SocketState
此枚举描述了蓝牙套接字的状态。
常量 | 值 | 描述 |
---|---|---|
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 | 套接字正在监听传入的连接。 |
成员函数文档
[显式]
QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)
使用 socketType 类型构建 parent 的蓝牙套接字。
[显式]
QBluetoothSocket::QBluetoothSocket(QObject *parent = nullptr)
使用 parent 构建蓝牙套接字。
[虚,无异常]
QBluetoothSocket::~QBluetoothSocket()
销毁蓝牙套接字。
void QBluetoothSocket::abort()
终止当前连接并重置套接字。与 disconnectFromService 不同,此函数立即关闭套接字,丢弃写缓冲区中的任何待处理数据。
注意:在 Android 上,终止套接字需要与 Android 线程的异步交互。因此,相关的 disconnected() 和 stateChanged() 信号将延迟,直到线程完成关闭。
另请参阅disconnectFromService() 和 close。
[继承虚拟]
qint64 QBluetoothSocket::bytesAvailable() const
重新实现:QIODevice::bytesAvailable() const.
返回等待读取的输入字节数。
另请参阅bytesToWrite() 和 read。
[继承虚拟]
qint64 QBluetoothSocket::bytesToWrite() const
重新实现:QIODevice::bytesToWrite() const.
返回等待写入的字节数。当控制权返回事件循环时,将写入字节。
[继承虚拟]
bool QBluetoothSocket::canReadLine() const
重新实现:QIODevice::canReadLine() const.
如果可以从设备读取至少一行,则返回 true。
[继承虚拟]
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 中打开套接字。
套接字首先进入连接状态,并尝试连接到地址。如果建立了连接,QBluetoothSocket将进入已连接状态并发出connected()。
在任何时候,套接字都可以发出 errorOccurred() 以指示发生了错误。
在Android和BlueZ(版本5.46或更高)中,无法使用端口建立对服务的连接。调用此函数将发出ServiceNotFoundError。
请注意,大多数平台在连接到远程设备之前都需要配对。否则,连接过程可能会失败。
另请参阅:state() 和 disconnectFromService().
[信号]
void QBluetoothSocket::connected()
在该连接建立时发出此信号。
另请参阅QBluetoothSocket::SocketState::ConnectedState和stateChanged。
void QBluetoothSocket::disconnectFromService()
尝试关闭套接字。如果存在待写数据,则QBluetoothSocket将进入关闭状态并等待所有数据写入完毕。最终,它将进入未连接状态并发出disconnected()信号。
另请参阅connectToService。
[信号]
void QBluetoothSocket::disconnected()
在套接字断开连接时发出此信号。
另请参阅QBluetoothSocket::SocketState::UnconnectedState和stateChanged。
[保护]
void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)
开始对服务进行设备发现,并使用openMode打开套接字。如果使用服务uuid设备地址创建套接字,请使用服务发现找到要连接的端口号。
QBluetoothSocket::SocketError QBluetoothSocket::error() const
返回最后错误。
[信号,自6.2以来]
void QBluetoothSocket::errorOccurred(QBluetoothSocket::SocketError error)
当发生错误时发出此信号。
此函数自Qt 6.2以来引入。
另请参阅error。
QString QBluetoothSocket::errorString() const
返回错误的可视文本字符串。
[重写虚拟]
bool QBluetoothSocket::isSequential() const
重写:QIODevice::isSequential() const。
QBluetoothAddress QBluetoothSocket::localAddress() const
返回本机设备的地址。
尽管一些平台可能有所不同,但通常必须连接套接字以确保返回有效的地址。特别是,当处理支持多个本地蓝牙适配器的平台时,这一点尤为重要。
QString QBluetoothSocket::localName() const
返回本地设备的名称。
尽管一些平台可能有所不同,但通常必须连接套接字以确保返回有效的名称。特别是,当处理支持多个本地蓝牙适配器的平台时,这一点尤为重要。
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。
[覆盖虚拟保护]
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仅支持两个级别的安全性(安全和非安全)。如果此标志设置为QBluetooth::Security::NoSecurity,则套接字对象不会使用任何身份验证或加密。任何其他安全性标志组合都将触发安全的蓝牙连接。默认情况下,此标志设置为QBluetooth::Security::Secure。
注意:安全的连接需要两个设备之间的配对。在某些平台上,配对会在连接建立时自动启动。在其他平台上,需要在尝试连接之前手动触发配对。
另请参阅: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).
© 2024 Qt公司。本文档中的文档贡献归各自所有者所有。本文档按自由软件基金会发布的