如何在C++中使用Qt蓝牙创建蓝牙连接

问题描述 投票:0回答:1

我正在为蓝牙客户端编写C++应用程序,它应该能够使用经典蓝牙(不是BLE)发现、配对和连接另一个具有特定MAC地址的蓝牙设备。主要问题是,如何创建连接? Qt 蓝牙概述中详细描述了发现和配对过程,并且按预期工作:

    //  To switch bluetooth on, code inside MyClass constructor
    QBluetoothLocalDevice localDevice;
    //  Check if Bluetooth is available on this device
    if (localDevice.isValid())
    {
        //  Turn Bluetooth on
        localDevice.powerOn();
        //  Other code
    }

    void MyClass::startDeviceDiscovery()
    {
        //  Create a discovery agent and connect to its signals
        QBluetoothDeviceDiscoveryAgent *discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
        connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
                this, SLOT(deviceDiscovered(QBluetoothDeviceInfo)));
        //  Start a discovery
        discoveryAgent->start();
        //  Other code
    }

    // In MyClass local slot, read information about the found devices
    void MyClass::deviceDiscovered(const QBluetoothDeviceInfo &device)
    {
        qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')';
    }

我还检查了这个答案,其中包含用于打开蓝牙、发现和配对的代码的完整实现。但是,配对完成后,我找不到与已发现并配对的蓝牙设备实现连接的方法。 Qt 文档中的 Bluetooth Chat 示例提供了此任务的某种解决方案,但由此产生了几个问题。这个例子建议创建对象

    RemoteSelector remoteSelector(adapter);

其中

RemoteSelector
是类,由 Qt Mobility Components 提供。此类的实例将允许创建特定的服务

    QBluetoothServiceInfo service = remoteSelector.service();

然后可以使用此服务与远程设备建立连接:

    client->startClient(service);

示例还提供了一段代码

    m_discoveryAgent = new QBluetoothServiceDiscoveryAgent(localAdapter);

    connect(m_discoveryAgent, &QBluetoothServiceDiscoveryAgent::serviceDiscovered,
        this, &RemoteSelector::serviceDiscovered);
    connect(m_discoveryAgent, &QBluetoothServiceDiscoveryAgent::finished,
        this, &RemoteSelector::discoveryFinished);
    connect(m_discoveryAgent, &QBluetoothServiceDiscoveryAgent::canceled,
        this, &RemoteSelector::discoveryFinished);

这与

RemoteSelector
类的实现中的代码类似,但不完全相同。

所以,这里出现了几个问题:

  1. 我的理解是否正确,为了能够在 Qt 6.5 中实现与配对设备的蓝牙连接,有必要安装单独的组件,称为 Qt Mobility Components,并使用那里的

    RemoteSelector
    类?

  2. 为什么聊天蓝牙示例提供了

    RemoteSelector
    类构造函数实现的部分代码,与此实现部分不同,是否需要根据提供的代码修改
    RemoteSelector
    的实现?

  3. 从良好的编码实践、编写干净的代码、良好的代码风格和组织的意义上来说,蓝牙聊天示例中描述的连接方式是在 Qt 中实现蓝牙连接的最佳方式吗?

  4. 一般来说,所描述的连接方式似乎很奇怪,因为虽然Qt蓝牙提供了直接的方式来打开蓝牙、发现和配对设备,但连接过程似乎要复杂得多,它需要额外的操作和额外的组件,Qt Mobility组件。这有什么解释吗?

请注意,我的程序中没有图形界面,也不使用 QT Creator,因为任务只是使用 Qt 库编写用于蓝牙连接的 C++ 应用程序。

c++ qt bluetooth connection
1个回答
0
投票

不,不需要安装Qt Mobility Components。示例中使用的

RemoteSelector
类的实现有所不同,可以在 here 找到 我想这回答了前两个问题,希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.