Вот частичное объяснение, почему это происходит.
https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root
Вот мой взгляд на это:
Фактическая иерархия вызовов Bluetooth выглядит следующим образом:
Реализация QT (библиотека) Bluetooth называется "Bluetooth (модуль).
Обратите внимание, что этот модуль НЕ одинаков во всех версиях QT, а в некоторых он отсутствует.
Модуль QT "библиотека" является копией/модификацией QT "bluez".
"bluez" основан на "hci".
Примечание. Я использовал «hci» напрямую, минуя «bluez», и не обнаружил никаких проблем с его использованием напрямую. На самом деле реализация QT отсутствует, физически сбросить «устройства Bluetooth, найденные с последним успешным вызовом для них». Поэтому я использую «hci» для сброса неизвестной базы данных устройств Bluetooth, найденных в прошлый раз.
Теперь есть примеры QT C/C++
пример btscanner работает как положено - возвращает близлежащие устройства и их "сервис"
btchat в основном делает то же самое, но терпит неудачу с вышеуказанной ошибкой.
Оба этих примера реализуют только три СИГНАЛА.
Начало
найденное устройство
законченный
** НЕТ СИГНАЛОВ "найдено устройство" ** в btchat,
есть там в btscanner !!
Поэтому «проблема» связана с реализацией btchat «bluez», а btchat использует РАЗНЫЕ функции QT — добавляет ДРУГОЙ слой для вызова/использования «bluez»...
Поскольку использование функций QT происходит в режиме реального времени, сложно найти последовательность вызовов и места, где они застревают.