首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Qt检测蓝牙崩溃或关机?

如何使用Qt检测蓝牙崩溃或关机?
EN

Stack Overflow用户
提问于 2018-07-13 01:01:56
回答 2查看 674关注 0票数 0

我正在试着用de QtBluetooth.dll的蓝牙低能耗设备进行通信。因此,我制作了一个应用程序,列出每个BLE设备,连接到它,读写和通知值,最后,断开连接。

代码语言:javascript
复制
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“事件也不会抛出任何状态。

那么,当崩溃出现时,我如何检索它呢?有没有我遗漏的事件监听器?

感谢您的帮助!

编辑

代码语言:javascript
复制
QLowEnergyController::Error(NoError)
QLowEnergyController::ControllerState(DiscoveredState)

QThread:

代码语言:javascript
复制
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();
EN

回答 2

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2018-07-16 13:05:19

考虑到Qt在Mac,iOS,Android和windows10上支持BLE,判断你的连接是否仍然有效的唯一可靠的方法是对它们进行长期的I/O,看看你的连接或服务对象是否发出错误信号。如果你只使用BLE/4.1,我建议你请求读取最小的gatt属性,大多数设备都有“电池”服务,无论如何你都必须定期检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51311043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档