appwyp 2023-03-28 07:32 采纳率: 43.8%
浏览 132
已结题

Qt5 gui 蓝牙 不能自动接收数据

Qt.5.15
Windows 10
蓝牙设备会以周期为120Hz, 向外发送数据

基于QT GUI 没收到这个信号 characteristicChanged, 换了几台电脑都一样,不能自动收取数据,不得不用一个Timer来读,但偶尔会错过数据

connect(service, &QLowEnergyService::stateChanged, this,&MainWindow::serviceStateChanged);
connect(service, &QLowEnergyService::characteristicChanged, this,&MainWindow::BLEServiceCharacteristicChanged);
connect(service, &QLowEnergyService::characteristicRead, this,&MainWindow::BLEServiceCharacteristicRead);

不得不用一个Timer来读,但偶尔会错过数据
service->readCharacteristic(m_Characteristic[2]);

但是基于 C# .net GUI 能够捕获这个 signal ,C#gui 和安卓都可以自动收到蓝牙设备发出的数据。
private void Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)

  • 写回答

5条回答 默认 最新

  • 小逸2023 2023-03-28 07:50
    关注
    该回答引用ChatGPT
    根据问题描述,可以看出在使用Qt5 GUI开发蓝牙应用时,无法自动接收数据,需要使用Timer来读取数据,但是偶尔会错过数据。而在使用C# .net GUI开发蓝牙应用时,可以自动接收数据。下面我将从以下几个方面进行分析:
    1. QLowEnergyService::characteristicChanged信号
    根据代码,可以看出已经连接了QLowEnergyService::characteristicChanged信号,但是无法自动接收数据。这可能是由于QLowEnergyService::characteristicChanged信号的触发机制不同导致的。在Qt中,QLowEnergyService::characteristicChanged信号只有在蓝牙设备的特征值发生变化时才会触发,而在C# .net中,GattCharacteristic的ValueChanged事件会在蓝牙设备发送数据时触发。因此,建议在Qt中使用QLowEnergyService::characteristicRead信号来读取数据。
    2. Timer读取数据
    根据代码,可以看出使用了Timer来读取数据,但是偶尔会错过数据。这可能是由于Timer的精度不够高导致的。建议使用Qt的QTimer类,它提供了更高的精度和更好的稳定性。另外,可以使用QTimer::start()函数来启动定时器,使用QTimer::stop()函数来停止定时器。
    3. 蓝牙设备发送数据的频率
    根据问题描述,蓝牙设备会以周期为120Hz向外发送数据。这可能会导致数据丢失。建议在Qt中使用QBluetoothSocket类来连接蓝牙设备,并使用QIODevice::readyRead()信号来读取数据。这样可以保证数据不会丢失。
    下面是一个使用QBluetoothSocket类读取蓝牙设备数据的示例代码:
    cpp
    QBluetoothSocket *socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
    socket->connectToService(QBluetoothAddress("00:11:22:33:44:55"), 1); // 连接蓝牙设备
    connect(socket, SIGNAL(readyRead()), this, SLOT(readBluetoothData())); // 读取数据

    cpp
    void MainWindow::readBluetoothData()
    {
    QByteArray data = socket->readAll();
    // 处理数据
    }

    希望以上分析对您有所帮助。
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月31日
  • 赞助了问题酬金50元 3月28日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 PPOCRLabel
  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡