最近搞毕设,买了个串口BLE蓝牙想配合Qt for Android做一个自制的遥控器,参考了很多qt蓝牙的文章,最后弄成apk发现连接不了我的蓝牙,折腾了好久发现Qt官方的蓝牙套接字只适用于SPP传输的蓝牙,而BLE蓝牙则有专门实现代码,说实话比蓝牙套接字复杂了好几百倍,而且官方的示例工程是一些有特殊功能的蓝牙,不太能移植到单单发送数据的串口蓝牙。由于我对蓝牙研究也不是很深,参考了很多大佬的博客,发现了一个比较好,功能相近的项目,下面是链接
但是进去后界面排版有点不好看,也没有源码可以提供,并且我只是要一个发送数据的功能,所以经过改造,实现了可以发送数据的功能了,下面贴下关键步骤的代码
下面是构造函数执行的操作,首先是建立一个搜索设备的服务类,设置好各种信号槽连接,然后开始搜索设备。
//搜索设备
m_deviceDiscoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
m_deviceDiscoveryAgent->setLowEnergyDiscoveryTimeout(20000); //设置超时时间
connect(m_deviceDiscoveryAgent,SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this,
SLOT(addDevice(QBluetoothDeviceInfo)));//搜索到设备操作
connect(m_deviceDiscoveryAgent, SIGNAL(finished()), this, SLOT(scanFinished()));//搜索结束
connect(this, SIGNAL(returnAddress(QBluetoothDeviceInfo)), this, SLOT(createCtl(QBluetoothDeviceInfo))); //开始连接目标设备
connect(ui->bluemsg,SIGNAL(cursorPositionChanged()),this,SLOT(autoScroll())); //信息一直在最下面显示
m_deviceDiscoveryAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod); //开始进行搜索
ui->blue_search->setEnabled(false);
当搜索到设备后会进入下列槽函数,这里对目标设备进行了过滤,去除了非BLE的设备,然后添加进ListWidget的列表中
void MainWindow::addDevice(const QBluetoothDeviceInfo &info)
{
if (info.coreConfigurations() & QBluetoothDeviceInfo::LowEnergyCoreConfiguration)
{//判断是否是BLE设备
QString label = QString("%1 %2").arg(info.address().toString()).arg(info.name());//按顺序显示地址和设备名称
QList<QListWidgetItem *> items = ui->bluelist->findItems(label, Qt::MatchExactly);//检查设备是否已存在,避免重复添加
if (items.empty())
{//不存在则添加至设备列表
QListWidgetItem *item = new QList