En esta página

Qt Bluetooth Visión general

Con la API Qt Bluetooth los casos de uso típicos son:

  • Recuperar información sobre el dispositivo Bluetooth local.
  • Buscar otros dispositivos Bluetooth dentro del alcance y obtener información sobre ellos.
  • Enviar archivos a dispositivos remotos mediante el perfil Object Push (OPP) de OBEX.
  • Conectarse a dispositivos remotos a través de un canal RFCOMM utilizando el Perfil de Puerto Serie (SPP).
  • Crear un servidor RFCOMM que permita conexiones entrantes utilizando SPP.
  • Recuperar especificaciones sobre dispositivos Bluetooth Low Energy.
  • Conectarse a un dispositivo Bluetooth Low Energy.
  • Recibir anuncios del dispositivo Bluetooth Low Energy.

Tenga en cuenta que el perfil Object Push no es compatible con Android y Windows.

Nota: Algunas partes de la funcionalidad RFCOMM no pueden ser configuradas por Qt en Windows. Las direcciones ServiceClassIds y ProtocolDescriptorList de un servicio se rellenan automáticamente. Por lo tanto, registrar un servicio con valores personalizados para estos campos puede no dar el resultado esperado en Windows.

Nota: El indicador de intensidad de señal recibida (RSSI), así como los datos específicos del fabricante anunciados por los dispositivos Bluetooth LE no son compatibles con el backend Win32. Además, sólo es posible encontrar dispositivos que hayan sido emparejados previamente a través de la Configuración de Windows.

En las siguientes secciones se describe cómo utilizar las clases de la API C++ de Qt Bluetooth para los casos de uso mencionados.

Recuperación de la información del dispositivo local

La API Qt Bluetooth tiene tres objetivos principales. El primero es obtener información sobre dispositivos locales y remotos. Los primeros pasos para recuperar la información del dispositivo son comprobar si Bluetooth está disponible en el dispositivo y leer la dirección y el nombre del dispositivo local. QBluetoothLocalDevice es la clase que proporciona toda esta información. Adicionalmente puedes usarla para activar/desactivar Bluetooth, establecer la visibilidad del dispositivo y determinar las conexiones actuales.

QBluetoothLocalDevice localDevice;
QString localDeviceName;

// Check if Bluetooth is available on this device
if (localDevice.isValid()) {

    // Turn Bluetooth on
    localDevice.powerOn();

    // Read local device name
    localDeviceName = localDevice.name();

    // Make it visible to others
    localDevice.setHostMode(QBluetoothLocalDevice::HostDiscoverable);

    // Get connected devices
    QList<QBluetoothAddress> remotes;
    remotes = localDevice.connectedDevices();
}

Búsqueda de dispositivos Bluetooth

De forma similar a QBluetoothLocalDevice, la API ofrece QBluetoothDeviceInfo que proporciona información similar para dispositivos remotos. Aunque puedes crear objetos QBluetoothDeviceInfo por tu cuenta y rellenarlos con datos, lo más sencillo es utilizar QBluetoothDeviceDiscoveryAgent para iniciar una búsqueda automatizada de dispositivos Bluetooth visibles dentro del rango conectable.

void MyClass::startDeviceDiscovery() { // Crear un agente de descubrimiento y conectarse a sus señales   QBluetoothDeviceDiscoveryAgent *discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this); connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(deviceDiscovered(QBluetoothDeviceInfo))); // Iniciar un discoveryAgent->start(); //...}// En su slot local, leer información sobre los dispositivos encontradosvoid MyClass::deviceDiscovered(const QBluetoothDeviceInfo &dispositivo){
    qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')';
}

Intercambio de datos entre dispositivos

El enfoque más flexible para la comunicación entre dos dispositivos habilitados para Bluetooth, es crear una conexión de puerto serie virtual e intercambiar datos libremente a través de esa conexión. Esto se puede hacer mediante el perfil de puerto serie (SPP). El Perfil de Puerto Serie emula una conexión serie sobre el protocolo de transporte Bluetooth RFCOMM.

Para poder recibir conexiones SPP entrantes, es necesario escuchar las conexiones entrantes utilizando QBluetoothServer.

rfcommServer = new QBluetoothServer(QBluetoothServiceInfo::RfcommProtocolo, this); connect(rfcommServer, &QBluetoothServer::newConnection, this, QOverload<>::of(&ChatServer::clientConnected));bool result =  rfcommServer->listen(localAdapter);if (!result) {    qWarning() << "Cannot bind chat server to" << localAdapter.toString();
   return; }

Conéctese a este servidor desde otro dispositivo que desempeñe el papel de cliente utilizando un QBluetoothSocket:

void ChatClient::startClient(const QBluetoothServiceInfo &remoteService) { if (socket) return; // Conectarse al serviciosocket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocolo);    qDebug() << "Create socket";
    socket->connectToService(remoteService);    qDebug() << "ConnectToService done";

    connect(socket, &QBluetoothSocket::readyRead, this , &ChatClient::readSocket); connect(socket, &QBluetoothSocket::connected, this, QOverload<>::of(&ChatClient::connected)); connect(socket, &QBluetoothSocket::disconnected, this, &ChatClient::disconnected); connect(socket, &QBluetoothSocket::errorOccurred, this, &ChatClient::onSocketErrorOccurred); }

El uso de una conexión de este tipo permite intercambiar cualquier tipo de datos en ambas direcciones. Es perfectamente adecuada para juegos o para sincronizar el estado entre dos instancias de una aplicación en dos dispositivos. Para descripciones más detalladas sobre cómo configurar el servidor y el cliente, consulta las secciones de descripción detallada de las clases QBluetoothServer y QBluetoothSocket. Un buen ejemplo para empezar con SPP es el ejemplo de Bluetooth Chat.

Bluetooth de baja energía

Bluetooth Low Energy, también conocido como Bluetooth Smart, es una nueva tecnología que permite a los dispositivos con bajo consumo de energía comunicarse entre sí. Puedes encontrar más detalles sobre esta tecnología y las APIs de Qt relacionadas en Bluetooth Low Energy Overview.

© 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.