En esta página

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.

ConstanteValorDescripción
QBluetoothSocket::SocketError::UnknownSocketError1Se ha producido un error desconocido.
QBluetoothSocket::SocketError::NoSocketError0Sin error. Utilizado para pruebas.
QBluetoothSocket::SocketError::HostNotFoundError3No se ha podido encontrar el host remoto.
QBluetoothSocket::SocketError::ServiceNotFoundError4No se pudo encontrar el UUID del servicio en el host remoto.
QBluetoothSocket::SocketError::NetworkError5El intento de leer o escribir desde el socket ha devuelto un error.
QBluetoothSocket::SocketError::UnsupportedProtocolError6Protocol no está soportado en esta plataforma.
QBluetoothSocket::SocketError::OperationError7Se intentó realizar una operación mientras el socket estaba en un estado que no lo permitía.
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10)2El host remoto cerró la conexión.
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4)8El sistema operativo solicita permisos que no fueron concedidos por el usuario.

enum class QBluetoothSocket::SocketState

Este enum describe el estado del socket Bluetooth.

ConstanteValorDescripción
QBluetoothSocket::SocketState::UnconnectedState0El socket no está conectado.
QBluetoothSocket::SocketState::ServiceLookupState1El socket está consultando los parámetros de conexión.
QBluetoothSocket::SocketState::ConnectingState2El zócalo está intentando conectarse a un dispositivo.
QBluetoothSocket::SocketState::ConnectedState3El zócalo está conectado a un dispositivo.
QBluetoothSocket::SocketState::BoundState4El zócalo está vinculado a una dirección local y a un puerto.
QBluetoothSocket::SocketState::ClosingState5El socket está conectado y se cerrará una vez que todos los datos pendientes se hayan escrito en el socket.
QBluetoothSocket::SocketState::ListeningState6El 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.