Qt Bluetooth Übersicht

Typische Anwendungsfälle für die Qt Bluetooth API sind:

  • Abrufen von Informationen über das lokale Bluetooth-Gerät.
  • Scannen nach anderen Bluetooth-Geräten in Reichweite und Abrufen von Informationen über sie.
  • Übertragung von Dateien an entfernte Geräte unter Verwendung des OBEX Object Push Profile (OPP)
  • Verbindung zu entfernten Geräten über einen RFCOMM-Kanal unter Verwendung des Serial Port Profile (SPP).
  • Erstellen eines RFCOMM-Servers, der eingehende Verbindungen über SPP zulässt.
  • Abrufen von Spezifikationen über Bluetooth Low Energy Geräte.
  • Verbindung mit einem Bluetooth Low Energy Gerät herstellen.
  • Empfang von Anzeigen von Bluetooth Low Energy Geräten.

Beachten Sie, dass das Object Push Profile unter Android und Windows nicht unterstützt wird.

Hinweis: Teile der RFCOMM-Funktionalität können von Qt unter Windows nicht konfiguriert werden. Die Felder ServiceClassIds und ProtocolDescriptorList eines Dienstes werden automatisch ausgefüllt. Daher kann die Registrierung eines Dienstes mit benutzerdefinierten Werten für diese Felder unter Windows nicht das erwartete Ergebnis liefern.

Hinweis: Der Received Signal Strength Indicator (RSSI) sowie die herstellerspezifischen Daten, die von Bluetooth LE-Geräten angezeigt werden, werden vom Win32-Backend nicht unterstützt. Außerdem ist es nur möglich, Geräte zu finden, die zuvor über die Windows-Einstellungen gepaart worden sind.

In den folgenden Abschnitten wird beschrieben, wie die Qt Bluetooth C++ API-Klassen für die oben genannten Anwendungsfälle verwendet werden können.

Abrufen von lokalen Geräteinformationen

Die Qt Bluetooth API hat drei Hauptzwecke. Der erste besteht darin, lokale und entfernte Geräteinformationen abzurufen. Die ersten Schritte beim Abrufen von Geräteinformationen bestehen darin, zu prüfen, ob Bluetooth auf dem Gerät verfügbar ist, und die Adresse und den Namen des lokalen Geräts zu lesen. QBluetoothLocalDevice ist die Klasse, die alle diese Informationen bereitstellt. Außerdem können Sie mit ihr Bluetooth ein- und ausschalten, die Sichtbarkeit des Geräts einstellen und die aktuellen Verbindungen ermitteln.

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();
}

Scannen nach Bluetooth-Geräten

Ähnlich wie QBluetoothLocalDevice bietet die API QBluetoothDeviceInfo, die ähnliche Informationen für entfernte Geräte bereitstellt. Sie können zwar auch selbst QBluetoothDeviceInfo Objekte erstellen und mit Daten füllen, aber einfacher ist es, die QBluetoothDeviceDiscoveryAgent zu verwenden, um eine automatische Suche nach sichtbaren Bluetooth-Geräten innerhalb des Verbindungsbereichs zu starten.

void MyClass::startDeviceDiscovery() { // Erstellen Sie einen DiscoveryAgent und verbinden Sie sich mit seinen Signalen   QBluetoothDeviceDiscoveryAgent *discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this); connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(deviceDiscovered(QBluetoothDeviceInfo))); // Starten Sie eine Entdeckung discoveryAgent->start(); //...}// Lesen Sie in Ihrem lokalen Slot Informationen über die gefundenen Gerätevoid MyClass::deviceDiscovered(const QBluetoothDeviceInfo &Gerät){
    qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')';

Austausch von Daten zwischen Geräten

Der flexiblere Ansatz für die Kommunikation zwischen zwei Bluetooth-fähigen Geräten besteht darin, eine virtuelle serielle Anschlussverbindung zu schaffen und Daten über diese Verbindung auszutauschen. Dies kann über das Serial Port Profile (SPP) erfolgen. Das Serial Port Profile emuliert eine serielle Verbindung über das Bluetooth-Transportprotokoll RFCOMM.

Um eingehende SPP-Verbindungen empfangen zu können, müssen Sie mit QBluetoothServer auf eingehende Verbindungen lauschen.

rfcommServer = neu QBluetoothServer(QBluetoothServiceInfo::RfcommProtocol, 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; }

Verbinden Sie sich mit diesem Server von einem anderen Gerät aus, das die Client-Rolle spielt, indem Sie eine QBluetoothSocket verwenden:

void ChatClient::startClient(const QBluetoothServiceInfo &remoteService) { if (socket) return; // Verbindung zum Dienst herstellensocket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);    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); }

Die Verwendung einer solchen Verbindung ermöglicht den Austausch jeglicher Art von Daten in beide Richtungen. Sie eignet sich hervorragend für Spiele oder für die Synchronisierung des Status zwischen zwei Instanzen einer Anwendung auf zwei Geräten. Genauere Beschreibungen zur Konfiguration von Server und Client finden Sie in den detaillierten Beschreibungsabschnitten der Klassen QBluetoothServer und QBluetoothSocket. Ein gutes Beispiel, um mit SPP zu beginnen, ist das Bluetooth-Chat-Beispiel.

Bluetooth Low Energy

Bluetooth Low Energy, auch bekannt als Bluetooth Smart, ist eine neue Technologie, die es Geräten mit geringem Energieverbrauch ermöglicht, miteinander zu kommunizieren. Weitere Einzelheiten zu dieser Technologie und den zugehörigen Qt-APIs finden Sie in der Bluetooth Low Energy Übersicht.

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