Here is partial explanation why is this happening.
https://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root
Here my take on it :
The actual bluetooth call hierarchy appears to be:
QT implementation (library ) of Bluetooth called "Bluetooth (module ).
Note that this module is NOT same in every QT version and it is actually missing in some.
The QT module "library" is QT copy / modification of "bluez".
"bluez" is based on "hci".
Note - I have used "hci" directly, bypassing "bluez" and have not found any issues using it direct. Actually QT implementation is missing physically reset the "Bluetooth devices found with last successful call for them ". So I use "hci" to reset the unknown database of Bluetooth devices found last time.
Now there are QT C/C++ examples
btscanner example works as expected - returns nearby devices and its "service"
btchat basically does same , but fails with the above error.
Both of these example implements only three SIGNALS
start
found device
finished
**there are NO "found device " SIGNALS ** in btchat,
there are there in btscanner !!
Therefore the "problem " is with btchat implementation of "bluez" and btchat uses DIFFERENT QT functions - adds ANOTHER layer to call / use "bluez"...
Since the usage of QT functions is in real time it is a challenge to find the sequence of the calls and where it gets stuck.