QBluetoothDeviceDiscoveryAgent Class
Die Klasse „QBluetoothDeviceDiscoveryAgent“ ermittelt die Bluetooth-Geräte in der Nähe. Mehr...
| Header: | #include <QBluetoothDeviceDiscoveryAgent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Bluetooth) target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake: | QT += bluetooth |
| Erbt von: | QObject |
Öffentliche Typen
| enum | DiscoveryMethod { NoMethod, ClassicMethod, LowEnergyMethod } |
| flags | DiscoveryMethods |
| enum | Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, UnsupportedPlatformError, …, UnknownError } |
Öffentliche Funktionen
| QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr) | |
| QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr) | |
| virtual | ~QBluetoothDeviceDiscoveryAgent() |
| QList<QBluetoothDeviceInfo> | discoveredDevices() const |
| QBluetoothDeviceDiscoveryAgent::Error | error() const |
| QString | errorString() const |
| bool | isActive() const |
| int | lowEnergyDiscoveryTimeout() const |
| void | setLowEnergyDiscoveryTimeout(int timeout) |
Öffentliche Slots
Signale
| void | canceled() |
| void | deviceDiscovered(const QBluetoothDeviceInfo &info) |
| void | deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields) |
(since 6.2) void | errorOccurred(QBluetoothDeviceDiscoveryAgent::Error error) |
| void | finished() |
Statische öffentliche Mitglieder
| QBluetoothDeviceDiscoveryAgent::DiscoveryMethods | supportedDiscoveryMethods() |
Ausführliche Beschreibung
So ermitteln Sie die in der Nähe befindlichen Bluetooth-Geräte:
- Erstellen Sie eine Instanz von „QBluetoothDeviceDiscoveryAgent“ und
- verbinden Sie sich entweder mit den Signalen „ deviceDiscovered()“ oder „ finished()“,
- und rufen Sie ` start()` auf.
void MyClass::startDeviceDiscovery()
{
// Einen Discovery-Agent erstellen und eine Verbindung zu dessen Signalen herstellen
QBluetoothDeviceDiscoveryAgent*discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
this, SLOT(deviceDiscovered(QBluetoothDeviceInfo)));
// Eine Erkennung starten
discoveryAgent->start();
//...
}
// Lies in deinem lokalen Slot Informationen über die gefundenen Geräte aus
void MyClass::deviceDiscovered(const QBluetoothDeviceInfo&device)
{
qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')';
}Um Ergebnisse asynchron abzurufen, verbinden Sie sich mit dem Signal „ deviceDiscovered()“. Um eine Liste aller erkannten Geräte zu erhalten, rufen Sie „ discoveredDevices()“ nach dem Signal „ finished()“ auf.
Diese Klasse kann zum Erkennen von Classic- und Low-Energy-Bluetooth-Geräten verwendet werden. Der jeweilige Gerätetyp lässt sich über das Attribut „ QBluetoothDeviceInfo::coreConfigurations()“ ermitteln. In den meisten Fällen enthält die von „ discoveredDevices()“ zurückgegebene Liste beide Gerätetypen. Allerdings kann nicht jede Plattform beide Gerätetypen erkennen. Auf Plattformen mit dieser Einschränkung (beispielsweise unterstützt iOS nur die Erkennung von Low-Energy-Geräten) beschränkt der Erkennungsprozess die Suche auf den unterstützten Gerätetyp.
Hinweis: Seit Android 6.0 ist für die Erkennung von Geräten die Berechtigung „ACCESS_COARSE_LOCATION“ erforderlich.
Hinweis: Das Win32-Backend unterstützt derzeit weder den Received Signal Strength Indicator (RSSI) noch herstellerspezifische Daten oder andere Datenaktualisierungen, die von Bluetooth-LE-Geräten nach der Erkennung gesendet werden.
Dokumentation zu Mitgliedstypen
enum QBluetoothDeviceDiscoveryAgent::DiscoveryMethod
flags QBluetoothDeviceDiscoveryAgent::DiscoveryMethods
Diese Enumeration beschreibt die Art der Erkennungsmethode, die von der „ QBluetoothDeviceDiscoveryAgent “ verwendet wird.
| Konstante | Wert | Beschreibung |
|---|---|---|
QBluetoothDeviceDiscoveryAgent::NoMethod | 0x0 | Die Erkennung ist nicht möglich. Keine der verfügbaren Methoden wird unterstützt. |
QBluetoothDeviceDiscoveryAgent::ClassicMethod | 0x01 | Der Erkennungsprozess sucht nach Bluetooth Classic (BaseRate)-Geräten. |
QBluetoothDeviceDiscoveryAgent::LowEnergyMethod | 0x02 | Der Erkennungsprozess sucht nach Bluetooth Low Energy-Geräten. |
Der Typ „DiscoveryMethods“ ist eine Typdefinition für „QFlags<DiscoveryMethod>“. Er speichert eine ODER-Kombination von „DiscoveryMethod“-Werten.
Siehe auch „ supportedDiscoveryMethods()“.
enum QBluetoothDeviceDiscoveryAgent::Error
Zeigt alle möglichen Fehlerzustände an, die bei der Erkennung von Bluetooth-Geräten festgestellt wurden.
| Konstante | Wert | Beschreibung |
|---|---|---|
QBluetoothDeviceDiscoveryAgent::NoError | 0 | Es ist kein Fehler aufgetreten. |
QBluetoothDeviceDiscoveryAgent::PoweredOffError | 2 | Der Bluetooth-Adapter ist ausgeschaltet; schalten Sie ihn ein, bevor Sie die Erkennung durchführen. |
QBluetoothDeviceDiscoveryAgent::InputOutputError | 1 | Beim Schreiben oder Lesen auf dem Gerät ist ein Fehler aufgetreten. |
QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError | 3 | Die übergebene lokale Adapteradresse stimmt mit der physischen Adapteradresse keines lokalen Bluetooth-Geräts überein. |
QBluetoothDeviceDiscoveryAgent::UnsupportedPlatformError (since Qt 5.5) | 4 | Die Gerätesuche ist auf der aktuellen Plattform nicht möglich oder nicht implementiert. Der Fehler wird als Reaktion auf einen Aufruf von ` start()` ausgelöst. Ein Beispiel hierfür sind iOS-Versionen unter 5.0, die die Bluetooth-Gerätesuche überhaupt nicht unterstützen. |
QBluetoothDeviceDiscoveryAgent::UnsupportedDiscoveryMethod (since Qt 5.8) | 5 | Eine der angeforderten Erkennungsmethoden wird von der aktuellen Plattform nicht unterstützt. |
QBluetoothDeviceDiscoveryAgent::LocationServiceTurnedOffError (since Qt 6.2) | 6 | Der Ortungsdienst ist deaktiviert. Die Nutzung von Bluetooth-APIs ist nicht möglich, wenn der Ortungsdienst deaktiviert ist. |
QBluetoothDeviceDiscoveryAgent::MissingPermissionsError (since Qt 6.4) | 7 | Das Betriebssystem fordert Berechtigungen an, die vom Benutzer nicht erteilt wurden. |
QBluetoothDeviceDiscoveryAgent::UnknownError | 100 | Es ist ein unbekannter Fehler aufgetreten. |
Dokumentation der Mitgliedsfunktionen
[explicit] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr)
Erstellt einen neuen Bluetooth-Geräteerkennungs-Agenten mit dem übergeordneten parent.
[explicit] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
Erstellt einen neuen Bluetooth-Geräteerkennungs-Agenten mit der Methode „ parent “.
Er verwendet „ deviceAdapter “ für die Gerätesuche. Wenn „ deviceAdapter “ standardmäßig instanziiert wird, verwendet das resultierende „QBluetoothDeviceDiscoveryAgent“-Objekt den lokalen Standard-Bluetooth-Adapter.
Wird ein ` deviceAdapter ` angegeben, der kein lokaler Adapter ist, wird ` error()` auf ` InvalidBluetoothAdapterError` gesetzt. Daher wird empfohlen, das Fehlerflag unmittelbar nach der Verwendung dieses Konstruktors zu prüfen.
Siehe auch ` error()`.
[virtual noexcept] QBluetoothDeviceDiscoveryAgent::~QBluetoothDeviceDiscoveryAgent()
Destruktor für ~QBluetoothDeviceDiscoveryAgent()
[signal] void QBluetoothDeviceDiscoveryAgent::canceled()
Dieses Signal wird ausgelöst, wenn die Geräteerkennung durch einen Aufruf von ` stop()` abgebrochen wird.
[signal] void QBluetoothDeviceDiscoveryAgent::deviceDiscovered(const QBluetoothDeviceInfo &info)
Dieses Signal wird ausgesendet, wenn das durch info beschriebene Bluetooth-Gerät erkannt wird.
Das Signal wird ausgesendet, sobald die wichtigsten Geräteinformationen erfasst wurden. Solange das Signal „ finished()“ jedoch noch nicht ausgesendet wurde, wird die Erfassung der Informationen auch für bereits erkannte Geräte fortgesetzt. Dies gilt insbesondere für Informationen zur Signalstärke (RSSI) und Aktualisierungen der Herstellerdaten. Wenn der Anwendungsfall kontinuierliche Aktualisierungen der Herstellerdaten oder des RSSI erfordert, ist es ratsam, die Geräteinformationen nach Abschluss der Erkennung über „ discoveredDevices()“ abzurufen oder auf das Signal „ deviceUpdated()“ zu warten.
Ist ` lowEnergyDiscoveryTimeout()` größer als 0, wird das Signal nur dann ausgesendet, wenn sich mindestens ein Attribut von ` info ` ändert. Dies entspricht dem Wunsch, Aktualisierungen zu erhalten, sobald genauere Informationen verfügbar sind. Eine Ausnahme von diesem Verhalten bildet der Fall, in dem ` lowEnergyDiscoveryTimeout ` auf ` 0` gesetzt ist. Ein Timeout von ` 0 ` drückt den Wunsch aus, das Erscheinen und Verschwinden von Low-Energy-Geräten im Laufe der Zeit zu überwachen. Unter dieser Bedingung wird das Signal `deviceDiscovered()` auch dann ausgelöst, wenn sich ` info ` seit der letzten Signalauslösung nicht geändert hat.
Siehe auch QBluetoothDeviceInfo::rssi() und lowEnergyDiscoveryTimeout().
[signal] void QBluetoothDeviceDiscoveryAgent::deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields)
Dieses Signal wird ausgesendet, wenn der Agent zusätzliche Informationen zu dem unter info beschriebenen Bluetooth-Gerät erhält. Die Flags „ updatedFields “ geben an, welche Informationen aktualisiert wurden.
Während der Erkennung können sich einige Informationen dynamisch ändern, wie beispielsweise signal strength und manufacturerData. Dieses Signal informiert Sie darüber, dass Ihre Anwendung, falls sie diese Daten anzeigt, diese aktualisieren kann, anstatt zu warten, bis die Erkennung abgeschlossen ist.
Siehe auch QBluetoothDeviceInfo::rssi() und lowEnergyDiscoveryTimeout().
QList<QBluetoothDeviceInfo> QBluetoothDeviceDiscoveryAgent::discoveredDevices() const
Gibt eine Liste aller erkannten Bluetooth-Geräte zurück.
QBluetoothDeviceDiscoveryAgent::Error QBluetoothDeviceDiscoveryAgent::error() const
Gibt den letzten Fehler zurück.
Etwaige vorherige Fehler werden beim Neustart der Erkennung gelöscht.
[signal, since 6.2] void QBluetoothDeviceDiscoveryAgent::errorOccurred(QBluetoothDeviceDiscoveryAgent::Error error)
Dieses Signal wird ausgelöst, wenn während der Bluetooth-Geräteerkennung ein „ error “ auftritt. Der Parameter „ error “ beschreibt den aufgetretenen Fehler.
Diese Funktion wurde in Qt 6.2 eingeführt.
Siehe auch „ error()“ und „ errorString()“.
QString QBluetoothDeviceDiscoveryAgent::errorString() const
Gibt eine für Menschen lesbare Beschreibung des letzten Fehlers zurück.
Siehe auch „ error()“ und „ errorOccurred()“.
[signal] void QBluetoothDeviceDiscoveryAgent::finished()
Dieses Signal wird ausgesendet, wenn die Erkennung von Bluetooth-Geräten abgeschlossen ist. Das Signal wird nicht ausgesendet, wenn die Geräteerkennung mit einem Fehler endet.
bool QBluetoothDeviceDiscoveryAgent::isActive() const
Gibt „true“ zurück, wenn der Agent gerade Bluetooth-Geräte erkennt; andernfalls gibt er „false“ zurück.
int QBluetoothDeviceDiscoveryAgent::lowEnergyDiscoveryTimeout() const
Gibt ein Timeout in Millisekunden zurück, das für die Suche nach Bluetooth-Low-Energy-Geräten gilt. Der Wert „ -1 “ bedeutet, dass die Plattform diese Eigenschaft nicht unterstützt und das Timeout für die Gerätesuche nicht angepasst werden kann. Der Rückgabewert „ 0 “ bedeutet, dass die Suche endlos fortgesetzt wird und manuell über „ stop()“ gestoppt werden muss.
Siehe auch setLowEnergyDiscoveryTimeout().
void QBluetoothDeviceDiscoveryAgent::setLowEnergyDiscoveryTimeout(int timeout)
Legt die maximale Suchdauer für die Suche nach Bluetooth-Low-Energy-Geräten auf „ timeout “ in Millisekunden fest. Wenn „ timeout “ auf „ 0 “ gesetzt ist, läuft die Erkennung so lange, bis „ stop()“ aufgerufen wird.
Dies spiegelt die Tatsache wider, dass der Erkennungsprozess für Bluetooth-Low-Energy-Geräte meist zeitlich unbegrenzt ist. Die Plattform sucht so lange nach weiteren Geräten, bis die Suche manuell gestoppt wird. Das Timeout stellt sicher, dass die Suche nach timeout Millisekunden abgebrochen wird. Selbstverständlich ist es weiterhin möglich, die Erkennung manuell abzubrechen, indem stop() aufgerufen wird.
Der neue Timeout-Wert wird erst wirksam, wenn die Gerätesuche neu gestartet wird. Zudem hat der Timeout keinen Einfluss auf die klassische Bluetooth-Gerätesuche. Je nach Plattform kann die klassische Suche den gesamten Erkennungsprozess um mehr als timeout verlängern.
Für eine zuverlässige Bluetooth Low Energy-Erkennung sollten mindestens 40.000 Millisekunden verwendet werden.
Siehe auch lowEnergyDiscoveryTimeout().
[slot] void QBluetoothDeviceDiscoveryAgent::start()
Startet die Bluetooth-Geräterekognition, sofern diese noch nicht gestartet wurde.
Das Signal „ deviceDiscovered()“ wird bei jeder Erkennung eines Geräts ausgelöst. Das Signal „ finished()“ wird ausgelöst, sobald die Gerätesuche abgeschlossen ist. Die Suche nutzt alle auf der Plattform unterstützten Suchmethoden.
Hinweis: Dieser Slot ist überladen. So stellen Sie eine Verbindung zu diesem Slot her:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
bluetoothDeviceDiscoveryAgent, qOverload<>(&QBluetoothDeviceDiscoveryAgent::start));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
bluetoothDeviceDiscoveryAgent, [receiver = bluetoothDeviceDiscoveryAgent]() { receiver->start(); });Siehe auch „ supportedDiscoveryMethods()“.
[slot] void QBluetoothDeviceDiscoveryAgent::start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods)
Startet die Bluetooth-Gerätekennfindung, sofern diese noch nicht gestartet wurde und die angegebenen „ methods “ unterstützt werden. Die „discovery methods “ schränken den Umfang der Gerätesuche ein. Wenn es sich bei dem Zieldienst oder -gerät beispielsweise um ein Bluetooth-Low-Energy-Gerät handelt, könnte diese Funktion genutzt werden, um die Suche auf Bluetooth-Low-Energy-Geräte zu beschränken und dadurch die Suchzeit erheblich zu verkürzen.
Hinweis: „ methods “ bestimmt lediglich die Art der Erkennung und impliziert keine Filterung der Ergebnisse. So kann die Suche beispielsweise weiterhin klassische Bluetooth-Geräte enthalten, obwohl „ methods “ auf „ LowEnergyMethod “ eingestellt ist. Dies kann an zuvor zwischengespeicherten Suchergebnissen liegen, die möglicherweise in die Suchergebnisse einfließen.
Hinweis: Einige Plattformen (z. B. Windows) stellen möglicherweise auch zwischengespeicherte Ergebnisse für Geräte bereit, die derzeit keine Signale senden. Andere Plattformen (wie iOS) liefern ausschließlich Informationen zu Geräten, die derzeit Signale senden. Sie können die empfangene Geräte-UUID (oder Bluetooth-Adresse) bei der ersten Erkennung speichern und diese später verwenden, um direkt eine Verbindung herzustellen (siehe QBluetoothDeviceInfo). Auf diese Weise können die Anwendungen die späteren Phasen der Geräteerkennung überspringen. Die Verwendung der Bluetooth-Adresse setzt voraus, dass sich die Bluetooth-Adresse des Remote-Geräts nicht ändert.
Hinweis: Dieser Slot ist überladen. So stellen Sie eine Verbindung zu diesem Slot her:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
bluetoothDeviceDiscoveryAgent, qOverload(&QBluetoothDeviceDiscoveryAgent::start));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
bluetoothDeviceDiscoveryAgent, [receiver = bluetoothDeviceDiscoveryAgent](QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods) { receiver->start(methods); }); [slot] void QBluetoothDeviceDiscoveryAgent::stop()
Beendet die Bluetooth-Gerätesuche. Das Signal „cancel()“ wird ausgegeben, sobald die Gerätesuche abgebrochen wird. „ start()“ kann aufgerufen werden, bevor das „cancel“-Signal empfangen wird. Sobald „ start()“ aufgerufen wurde, wird das „cancel“-Signal der vorherigen Suche verworfen.
[static] QBluetoothDeviceDiscoveryAgent::DiscoveryMethods QBluetoothDeviceDiscoveryAgent::supportedDiscoveryMethods()
Diese Funktion gibt die von der aktuellen Plattform unterstützten Erkennungsmethoden zurück. Sie kann verwendet werden, um den Umfang der Geräteerkennung einzuschränken.
© 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.