diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2023-03-28 17:39:22 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-03-29 12:29:12 +0000 |
commit | 7baabffc7b4b2b42f552279c4801689ab5b204a7 (patch) | |
tree | 26adf64ce6771c7132cfedeafb7d26489b68237c | |
parent | 989f128a89216ead15a297fc568760fea4461668 (diff) | |
download | qtconnectivity-7baabffc7b4b2b42f552279c4801689ab5b204a7.tar.gz |
HeartRate Game example: do not show duplicated devices
The deviceDiscovered() signal can be emitted more than once for the
same device, so implement a check before adding a device.
This commit amends a1f43b9dcd722527d52ceb0c7a138bd2994c1a7b
Task-number: QTBUG-111972
Change-Id: Iff0a2b301d6d05090745ef97cedf5fab4532da7e
Reviewed-by: Juha Vuolle <juha.vuolle@qt.io>
(cherry picked from commit d59db8d3e781e75481480507d36c08568ff4213a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | examples/bluetooth/heartrate-game/devicefinder.cpp | 13 | ||||
-rw-r--r-- | examples/bluetooth/heartrate-game/devicefinder.h | 2 | ||||
-rw-r--r-- | src/bluetooth/doc/src/bluetooth-le-overview.qdoc | 5 |
3 files changed, 17 insertions, 3 deletions
diff --git a/examples/bluetooth/heartrate-game/devicefinder.cpp b/examples/bluetooth/heartrate-game/devicefinder.cpp index 2d306d0c..5d1c129a 100644 --- a/examples/bluetooth/heartrate-game/devicefinder.cpp +++ b/examples/bluetooth/heartrate-game/devicefinder.cpp @@ -67,7 +67,18 @@ void DeviceFinder::addDevice(const QBluetoothDeviceInfo &device) { // If device is LowEnergy-device, add it to the list if (device.coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration) { - m_devices.append(new DeviceInfo(device)); + auto devInfo = new DeviceInfo(device); + auto it = std::find_if(m_devices.begin(), m_devices.end(), + [devInfo](DeviceInfo *dev) { + return devInfo->getAddress() == dev->getAddress(); + }); + if (it == m_devices.end()) { + m_devices.append(devInfo); + } else { + auto oldDev = *it; + *it = devInfo; + delete oldDev; + } setInfo(tr("Low Energy device found. Scanning more...")); //! [devicediscovery-3] emit devicesChanged(); diff --git a/examples/bluetooth/heartrate-game/devicefinder.h b/examples/bluetooth/heartrate-game/devicefinder.h index 3766ee5f..29f47fd3 100644 --- a/examples/bluetooth/heartrate-game/devicefinder.h +++ b/examples/bluetooth/heartrate-game/devicefinder.h @@ -53,7 +53,7 @@ signals: private: DeviceHandler *m_deviceHandler; QBluetoothDeviceDiscoveryAgent *m_deviceDiscoveryAgent; - QList<QObject*> m_devices; + QList<DeviceInfo *> m_devices; QTimer m_demoTimer; }; diff --git a/src/bluetooth/doc/src/bluetooth-le-overview.qdoc b/src/bluetooth/doc/src/bluetooth-le-overview.qdoc index b56eb915..d9a3ee19 100644 --- a/src/bluetooth/doc/src/bluetooth-le-overview.qdoc +++ b/src/bluetooth/doc/src/bluetooth-le-overview.qdoc @@ -155,7 +155,10 @@ Low Energy devices. Since we are only interested in Low Energy devices we filter the device type within the receiving slot. The device type can be ascertained using the \l QBluetoothDeviceInfo::coreConfigurations() - flag: + flag. The \l {QBluetoothDeviceDiscoveryAgent::}{deviceDiscovered()} signal + may be emitted multiple times for the same device as more details are + discovered. Here we match these device discoveries so that the user only + sees the individual devices: \snippet heartrate-game/devicefinder.cpp devicediscovery-3 \snippet heartrate-game/devicefinder.cpp devicediscovery-4 |