我正在试着用de QtBluetooth.dll的蓝牙低能耗设备进行通信。因此,我制作了一个应用程序,列出每个BLE设备,连接到它,读写和通知值,最后,断开连接。
controller = new QLowEnergyController(currentDevice.getDevice());
connect(controller, &QLowEnergyController::connected,
this, &Device::deviceConnected);
connect(controller, &QLowEnergyController::disconnected,
this, &Device::deviceDisconnected);
connect(controller, &QLowEnergyController::discoveryFinished,
this, &Device::serviceScanDone);
connect(controller, QOverload<QLowEnergyController::Error>::of(&QLowEnergyController::error),
this, &Device::errorReceived);
connect(controller, &QLowEnergyController::serviceDiscovered,
this, &Device::addLowEnergyService);
connect(controller, &QLowEnergyController::stateChanged,
this, &Device::deviceStateChanged);这很好用,但有一个问题。即使我的控制器对象的"stateChanged“事件也不会抛出任何状态。
那么,当崩溃出现时,我如何检索它呢?有没有我遗漏的事件监听器?
感谢您的帮助!
编辑
QLowEnergyController::Error(NoError)
QLowEnergyController::ControllerState(DiscoveredState)QThread:
QThread * errorThread = QThread::create([this]() {
while (this->controller->error() != QLowEnergyController::NetworkError)
{
qInfo() << this->controller->error();
qInfo() << this->controller->state();
Sleep(1000);
}
qInfo() << this->controller->error();
qInfo() << this->controller->state();
});
errorThread->start();发布于 2018-07-13 01:23:19
您使用的是哪个Qt版本?从Qt 5.10开始,错误类型为QLowEnergyController::RemoteHostClosedError
远程设备关闭了连接。这个值是Qt 5.10引入的。
有关详细信息,请参阅http://doc.qt.io/qt-5/qlowenergycontroller.html#Error-enum。此错误将通过error-signal发出。
在更早的版本中,我非常确定你在读写崩溃的设备时会收到一个QLowEnergyController::NetworkError。
发布于 2018-07-16 13:05:19
考虑到Qt在Mac,iOS,Android和windows10上支持BLE,判断你的连接是否仍然有效的唯一可靠的方法是对它们进行长期的I/O,看看你的连接或服务对象是否发出错误信号。如果你只使用BLE/4.1,我建议你请求读取最小的gatt属性,大多数设备都有“电池”服务,无论如何你都必须定期检查。
https://stackoverflow.com/questions/51311043
复制相似问题