QBluetoothSocket Class
La clase QBluetoothSocket permite la conexión a un dispositivo Bluetooth que ejecuta un servidor bluetooth. Más...
| Cabecera: | #include <QBluetoothSocket> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Bluetooth)target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake: | QT += bluetooth |
| Hereda: | QIODevice |
Tipos Públicos
| enum class | SocketError { UnknownSocketError, NoSocketError, HostNotFoundError, ServiceNotFoundError, NetworkError, …, MissingPermissionsError } |
| enum class | SocketState { UnconnectedState, ServiceLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState } |
Funciones Públicas
| 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 |
Funciones públicas reimplementadas
| virtual qint64 | bytesAvailable() const override |
| virtual qint64 | bytesToWrite() const override |
| virtual bool | canReadLine() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
Señales
| void | connected() |
| void | disconnected() |
(since 6.2) void | errorOccurred(QBluetoothSocket::SocketError error) |
| void | stateChanged(QBluetoothSocket::SocketState state) |
Funciones protegidas
| void | doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode) |
| void | setSocketError(QBluetoothSocket::SocketError error_) |
| void | setSocketState(QBluetoothSocket::SocketState state) |
Funciones protegidas reimplementadas
| virtual qint64 | readData(char *data, qint64 maxSize) override |
| virtual qint64 | writeData(const char *data, qint64 maxSize) override |
Descripción detallada
QBluetoothSocket soporta dos tipos de socket, L2CAP y RFCOMM.
L2CAP es un socket Bluetooth de bajo nivel orientado a datagramas. Android no soporta L2CAP para conexiones de socket.
RFCOMM es un socket fiable orientado a flujos. Los sockets RFCOMM emulan un puerto serie RS-232.
Para crear una conexión a un servicio Bluetooth, cree un socket del tipo apropiado y llame a connectToService() pasando la dirección Bluetooth y el número de puerto. QBluetoothSocket emitirá la señal connected() cuando se establezca la conexión.
Si una plataforma no soporta Protocol, la llamada a connectToService() emitirá un error UnsupportedProtocolError.
Nota: QBluetoothSocket no soporta operaciones síncronas de lectura y escritura. Funciones como waitForReadyRead() y waitForBytesWritten() no están implementadas. Las operaciones de E/S deben realizarse utilizando readyRead(), read() y write().
En iOS, esta clase no se puede utilizar porque la plataforma no expone una API que pueda permitir el acceso a funciones relacionadas con QBluetoothSocket.
Nota: En macOS Monterey (12) el flujo de datos del socket se detiene cuando se ejecuta un diálogo modal o se entra en un modo de seguimiento de eventos (por ejemplo, pulsando prolongadamente un botón de cierre de ventana). Este problema se ha solucionado en macOS Sequoia (15).
Documentación de tipos de miembros
enum class QBluetoothSocket::SocketError
Este enum describe los tipos de error del socket Bluetooth.
| Constante | Valor | Descripción |
|---|---|---|
QBluetoothSocket::SocketError::UnknownSocketError | 1 | Se ha producido un error desconocido. |
QBluetoothSocket::SocketError::NoSocketError | 0 | Sin error. Utilizado para pruebas. |
QBluetoothSocket::SocketError::HostNotFoundError | 3 | No se ha podido encontrar el host remoto. |
QBluetoothSocket::SocketError::ServiceNotFoundError | 4 | No se pudo encontrar el UUID del servicio en el host remoto. |
QBluetoothSocket::SocketError::NetworkError | 5 | El intento de leer o escribir desde el socket ha devuelto un error. |
QBluetoothSocket::SocketError::UnsupportedProtocolError | 6 | Protocol no está soportado en esta plataforma. |
QBluetoothSocket::SocketError::OperationError | 7 | Se intentó realizar una operación mientras el socket estaba en un estado que no lo permitía. |
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10) | 2 | El host remoto cerró la conexión. |
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4) | 8 | El sistema operativo solicita permisos que no fueron concedidos por el usuario. |
enum class QBluetoothSocket::SocketState
Este enum describe el estado del socket Bluetooth.
| Constante | Valor | Descripción |
|---|---|---|
QBluetoothSocket::SocketState::UnconnectedState | 0 | El socket no está conectado. |
QBluetoothSocket::SocketState::ServiceLookupState | 1 | El socket está consultando los parámetros de conexión. |
QBluetoothSocket::SocketState::ConnectingState | 2 | El zócalo está intentando conectarse a un dispositivo. |
QBluetoothSocket::SocketState::ConnectedState | 3 | El zócalo está conectado a un dispositivo. |
QBluetoothSocket::SocketState::BoundState | 4 | El zócalo está vinculado a una dirección local y a un puerto. |
QBluetoothSocket::SocketState::ClosingState | 5 | El socket está conectado y se cerrará una vez que todos los datos pendientes se hayan escrito en el socket. |
QBluetoothSocket::SocketState::ListeningState | 6 | El socket está a la espera de conexiones entrantes. |
Documentación de las funciones miembro
[explicit] QBluetoothSocket::QBluetoothSocket(QObject *parent = nullptr)
Construye una toma Bluetooth con parent.
[explicit] QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)
Construye una toma Bluetooth de tipo socketType, con parent.
[virtual noexcept] QBluetoothSocket::~QBluetoothSocket()
Destruye la toma Bluetooth.
void QBluetoothSocket::abort()
Aborta la conexión actual y reinicia el socket. A diferencia de disconnectFromService(), esta función cierra inmediatamente el socket, descartando cualquier dato pendiente en el búfer de escritura.
Nota: En Android, abortar el socket requiere una interacción asíncrona con los hilos de Android. Por lo tanto, las señales asociadas disconnected() y stateChanged() se retrasan hasta que los hilos hayan finalizado el cierre.
Véase también disconnectFromService() y close().
[override virtual] qint64 QBluetoothSocket::bytesAvailable() const
Reimplementa: QIODevice::bytesAvailable() const.
Devuelve el número de bytes entrantes que están esperando ser leídos.
Véase también bytesToWrite() y read().
[override virtual] qint64 QBluetoothSocket::bytesToWrite() const
Reimplementa: QIODevice::bytesToWrite() const.
Devuelve el número de bytes que están esperando a ser escritos. Los bytes se escriben cuando el control vuelve al bucle de eventos.
[override virtual] bool QBluetoothSocket::canReadLine() const
Reimplementa: QIODevice::canReadLine() const.
Devuelve true si se puede leer al menos una línea del dispositivo
[override virtual] void QBluetoothSocket::close()
Reimplementa: QIODevice::close().
Desconecta la conexión del socket con el dispositivo.
Nota: En Android, el cierre del socket requiere una interacción asíncrona con los hilos de Android. Por lo tanto, las señales asociadas disconnected() y stateChanged() se retrasan hasta que los hilos hayan finalizado el cierre.
void QBluetoothSocket::connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite)
Intenta conectarse al servicio descrito por service.
El socket se abre en la dirección openMode. El socketType() se ignora si service especifica un QBluetoothServiceInfo::socketProtocol() diferente.
El socket entra primero en ConnectingState e intenta conectarse al dispositivo que proporciona service. Si se establece una conexión, QBluetoothSocket entra en ConnectedState y emite connected().
En cualquier momento, el socket puede emitir errorOccurred() para señalar que se ha producido un error.
Tenga en cuenta que la mayoría de las plataformas requieren un emparejamiento antes de conectarse al dispositivo remoto. De lo contrario, el proceso de conexión puede fallar.
En Android, sólo son posibles las conexiones RFCOMM. Esta función ignora cualquier indicador de protocolo de socket y asume RFCOMM.
Véase también state() y disconnectFromService().
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite)
Intenta establecer una conexión con el servicio identificado por uuid en el dispositivo con dirección address.
El socket se abre en la dirección openMode.
En el caso de BlueZ, el socket entra primero en ServiceLookupState y consulta los parámetros de conexión de uuid. Si los parámetros de servicio se recuperan con éxito, el socket entra en ConnectingState e intenta conectarse a address. Si se establece una conexión, QBluetoothSocket entra en ConnectedState y emite connected().
En Android, la conexión de servicio puede establecerse directamente utilizando el UUID del servicio remoto. Por lo tanto, la plataforma no requiere el ServiceLookupState y socketType() siempre se establece en QBluetoothServiceInfo::RfcommProtocol.
En cualquier momento, el socket puede emitir errorOccurred() para señalar que se ha producido un error.
Ten en cuenta que la mayoría de las plataformas requieren un emparejamiento antes de conectarse al dispositivo remoto. De lo contrario, el proceso de conexión puede fallar.
Véase también state() y disconnectFromService().
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
Intenta establecer una conexión con address en la dirección port.
El socket se abre en openMode.
El socket entra primero en ConnectingState, e intenta conectarse a address. Si se establece una conexión, QBluetoothSocket entra en ConnectedState y emite connected().
En cualquier momento, el socket puede emitir errorOccurred() para señalar que se ha producido un error.
En Android y BlueZ (versión 5.46 o superior), no se puede establecer una conexión a un servicio utilizando un puerto. La llamada a esta función emitirá un ServiceNotFoundError.
Tenga en cuenta que la mayoría de las plataformas requieren un emparejamiento antes de conectarse al dispositivo remoto. De lo contrario, el proceso de conexión puede fallar.
Véase también state() y disconnectFromService().
[signal] void QBluetoothSocket::connected()
Esta señal se emite cuando se establece una conexión.
Véase también QBluetoothSocket::SocketState::ConnectedState y stateChanged().
void QBluetoothSocket::disconnectFromService()
Intenta cerrar el socket. Si hay datos pendientes esperando a ser escritos QBluetoothSocket entrará en ClosingState y esperará hasta que todos los datos hayan sido escritos. Finalmente, entrará en UnconnectedState y emitirá la señal disconnected().
Véase también connectToService().
[signal] void QBluetoothSocket::disconnected()
Esta señal se emite cuando se desconecta el socket.
Véase también QBluetoothSocket::SocketState::UnconnectedState y stateChanged().
[protected] void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)
Inicie el descubrimiento de dispositivos para service y abra el socket con openMode. Si el socket se crea con una dirección de dispositivo uuid de servicio, utilice el descubrimiento de servicios para encontrar el número de puerto al que conectarse.
QBluetoothSocket::SocketError QBluetoothSocket::error() const
Devuelve el último error.
[signal, since 6.2] void QBluetoothSocket::errorOccurred(QBluetoothSocket::SocketError error)
Esta señal se emite cuando se produce un error.
Esta función se introdujo en Qt 6.2.
Véase también error().
QString QBluetoothSocket::errorString() const
Devuelve una cadena de texto visualizable por el usuario para el error.
[override virtual] bool QBluetoothSocket::isSequential() const
Reimplementa: QIODevice::isSequential() const.
QBluetoothAddress QBluetoothSocket::localAddress() const
Devuelve la dirección del dispositivo local.
Aunque algunas plataformas pueden diferir, generalmente el socket debe estar conectado para garantizar la devolución de una dirección válida. En particular, esto es cierto cuando se trata de plataformas que soportan múltiples adaptadores Bluetooth locales.
QString QBluetoothSocket::localName() const
Devuelve el nombre del dispositivo local.
Aunque algunas plataformas pueden diferir, el socket debe estar generalmente conectado para garantizar la devolución de un nombre válido. En particular, esto es cierto cuando se trata de plataformas que soportan múltiples adaptadores Bluetooth locales.
quint16 QBluetoothSocket::localPort() const
Devuelve el número de puerto del socket local si está disponible, en caso contrario devuelve 0. Aunque algunas plataformas pueden diferir, generalmente el socket debe estar conectado para garantizar la devolución de un número de puerto válido.
En Android y macOS, esta función no está soportada y devuelve 0.
QBluetoothAddress QBluetoothSocket::peerAddress() const
Devuelve la dirección del dispositivo homólogo.
QString QBluetoothSocket::peerName() const
Devuelve el nombre del dispositivo homólogo.
quint16 QBluetoothSocket::peerPort() const
Devuelve el número de puerto del socket homólogo si está disponible, de lo contrario devuelve 0. En Android, esta función no está soportada.
QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const
Devuelve los parámetros de seguridad utilizados para el intento de conexión inicial.
Los parámetros de seguridad pueden ser renegociados entre las dos partes durante o después de que se haya establecido la conexión. Si se produce un cambio de este tipo, no se refleja en el valor de este indicador.
En macOS, esta bandera siempre se establece en QBluetooth::Security::Secure.
Véase también setPreferredSecurityFlags().
[override virtual protected] qint64 QBluetoothSocket::readData(char *data, qint64 maxSize)
Reimplementa: QIODevice::readData(char *data, qint64 maxSize).
void QBluetoothSocket::setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)
Establece el parámetro de seguridad preferido para el intento de conexión a flags. Este valor se incorpora al llamar a connectToService(). Por lo tanto, es necesario volver a conectarse para cambiar este parámetro para una conexión existente.
En Bluez esta propiedad se establece en QBluetooth::Security::Authorization por defecto.
En macOS, este valor se ignora ya que la plataforma no permite el acceso al parámetro de seguridad del socket. Por defecto, la plataforma prefiere conexiones seguras/cifradas y por lo tanto esta función siempre devuelve QBluetooth::Security::Secure.
Android sólo soporta dos niveles de seguridad (seguro y no seguro). Si esta bandera se establece en QBluetooth::Security::NoSecurity el objeto socket no empleará ningún tipo de autenticación o encriptación. Cualquier otra combinación de seguridad activará una conexión Bluetooth segura. Este indicador está configurado por defecto en QBluetooth::Security::Secure.
Nota: Una conexión segura requiere un emparejamiento entre los dos dispositivos. En algunas plataformas, el emparejamiento se inicia automáticamente durante el establecimiento de la conexión. Otras plataformas requieren que la aplicación inicie manualmente el emparejamiento antes de intentar la conexión.
Véase también preferredSecurityFlags().
bool QBluetoothSocket::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
Establece el socket a utilizar socketDescriptor con un tipo de socketType, que está en estado socketState, y modo openMode.
El descriptor del socket es propiedad de la instancia QBluetoothSocket y puede cerrarse una vez finalizado.
Devuelve true en caso de éxito.
Véase también socketDescriptor().
[protected] void QBluetoothSocket::setSocketError(QBluetoothSocket::SocketError error_)
Establece el tipo de error que se produjo por última vez en error_.
[protected] void QBluetoothSocket::setSocketState(QBluetoothSocket::SocketState state)
Establece el estado del socket en state.
int QBluetoothSocket::socketDescriptor() const
Devuelve el descriptor de socket específico de la plataforma, si está disponible. Esta función devuelve -1 si el descriptor no está disponible o se ha producido un error.
Véase también setSocketDescriptor().
QBluetoothServiceInfo::Protocol QBluetoothSocket::socketType() const
Devuelve el tipo de socket. El socket se ajusta automáticamente al protocolo ofrecido por el servicio remoto.
Android sólo admite sockets basados en RFCOMM.
QBluetoothSocket::SocketState QBluetoothSocket::state() const
Devuelve el estado actual del socket.
[signal] void QBluetoothSocket::stateChanged(QBluetoothSocket::SocketState state)
Esta señal se emite cuando el estado del socket cambia a state.
Véase también connected(), disconnected(), state() y QBluetoothSocket::SocketState.
[override virtual protected] qint64 QBluetoothSocket::writeData(const char *data, qint64 maxSize)
Reimplementa: 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.