Qt 蓝牙库基础

news2024/11/27 23:49:33

1.目的

使用QT自带的蓝牙功能库进行学习开发,了解蓝牙设备的工作原理和使用流程,目的搭建可以自由控制的蓝牙app,为以后的学习生活做基础。

2.本地设备

采用自己vivo Y53的手机作为实验对象。

使用到的QT蓝牙库的类名:

QBluetoothLocalDevice

我们可以直接到QT软件帮助文档去搜索,如下图所示:

 

我们可以了解到这个类适用于QT5.2以上版本

主要我们在新建的工程中加上头文件和附加库声明。

1 #include <lQBluetoothLocalDevice.h>    //本地设备驱动头文件
2  
3 private:
4  
5 QBluetoothLocalDevice *localDevice;    //声明变量

在.pro中

QT += bluetooth

为变量声明新的空间:

localDevice = new QBluetoothLocalDevice();

然后我们就能调用里面的函数:

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

 

1 localDevice->address();  返回此蓝牙设备的MAC地址。
2 localDevice->hostMode();  返回此本地蓝牙设备的当前主机模式。
3 localDevice->powerOn(); 将设备返回hostMode()状态后,如果关闭电源,则为设备供电
4 localDevice->pairingStatus(info.address());返回地址的当前蓝牙配对状态(如果是未配对、配对或已授权。
5 localDevice->setHostMode(QBluetoothLocalDevice::HostPoweredOff);将此本地蓝牙设备的主机模式设置为关闭模式。

3.搜索设备

用到第二个类:

QBluetoothDeviceDiscoveryAgent类-----------发现附近的蓝牙设备。

 

 

1 #include <QBluetoothDeviceDiscoverAgent.h>    //本地设备驱动头文件
2  
3 private:
4  
5 QBluetoothDeviceDiscoverAgent *discoveryAgent;    //声明变量
discoveryAgent= new QBluetoothLocalDevice();

 

1 discoveryAgent->error(); //返回最后一个错误
2 discoveryAgent->errorString(); //返回对最后一个错误的描述
3 discoveryAgent->inquiryType(); //返回查询类型
4 discoveryAgent->isActive(); //如果代理当前正在发现蓝牙设备,则返回true,否则返回false。
5 discoveryAgent->lowEnergyDiscoveryTimeout(); //返回一个以毫秒为单位的超时,该超时应用于蓝牙低能耗设备搜索。值为-1意味着平台不支持此属性,并且无法调整设备搜索的超时。返回值为0意味着一个永无止境的搜索,必须通过stop()手动停止搜索。

 

执行函数:

discoveryAgent->start();  //开始搜索设备
discoveryAgent->stop();  //停止搜索设备

信号槽:

connect(discoveryAgent, SIGNAL(finished()), this, SLOT(findFinish()));  //完成信号发出进行动作
connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(addBlueToothDevicesToList(QBluetoothDeviceInfo)));   //当发现info描述的蓝牙设备时发出此信号来进行动作

而canceled() //当设备发现被stop()调用中止时发出此信号。

同样我们也可以使用error()来根据不同的错误类型进行不同的操作。

 

4.蓝牙服务器代理

QBluetoothSocket:

 

操作同上:

 

1   socket->abort();//终止当前连接并重置套接字。与disconnectFromService()不同,这个函数立即关闭套接字,丢弃写缓冲区中的任何挂起的数据。
2 socket->disconnectFromService();//试图关闭套接字。如果有等待写入的挂起数据,QBluetoothSocket将进入ClosingState并等待所有数据被写入。最后,它将进入UnconnectedState并发出disconnected()信号。
3 socket->localAddress();//返回本地设备的地址。
4 socket->localName();//返回本地设备的名称。
5 socket->localPort();//如果可用,返回本地套接字的端口号,否则返回0。虽然有些平台可能有所不同,但套接字通常必须连接,以确保返回有效的端口号。
6 socket->setSocketDescriptor();//将套接字设置为使用socketDescriptor和socketType类型,socketType处于状态、socketState和模式、openMode。
socket->connectToService(address, QBluetoothUuid(serviceUuid) ,QIODevice::ReadWrite);

 

 

 

connect(socket,SIGNAL(readyRead()),this,SLOT(readBluetoothDataEvent()));  //每当有新数据可从设备当前的读取通道读取时,就会发出此信号一次。它只在新数据可用时才会再次发出,例如当网络数据的新负载到达您的网络套接字时,或者当一个新的数据块被添加到您的设备时。
connect(socket,SIGNAL(connected()),this,SLOT(bluetoothConnectedEvent()));//此信号在建立连接时发出。
connect(socket,SIGNAL(disconnected()),this,SLOT(bluetoothDisconnectedEvent()));//当套接字断开时发出此信号。

5.搜索连接蓝牙设备

显示可用的蓝牙:

 1 /* 在ListWidget上显示查找到的蓝牙设备 */
 2 void Widget::addBlueToothDevicesToList(const QBluetoothDeviceInfo &info)
 3 {
 4     QString label = QString("%1 %2").arg(info.address().toString()).arg(info.name());
 5     //%1为蓝牙设备的地址,%2为蓝牙设备的名字
 6     QList<QListWidgetItem *> items = ui->listWidget->findItems(label, Qt::MatchExactly);
 7  
 8     if (items.empty()) {
 9         QListWidgetItem *item = new QListWidgetItem(label);
10         QBluetoothLocalDevice::Pairing pairingStatus = localDevice->pairingStatus(info.address());
11        
12  /* 蓝牙状态pairingStatus,Pairing枚举类型 0:Unpaired没配对 1:Paired配对但没授权 2:AuthorizedPaired配对且授权 */
13         if (pairingStatus == QBluetoothLocalDevice::Paired || pairingStatus == QBluetoothLocalDevice::AuthorizedPaired )
14             item->setTextColor(QColor(Qt::green));
15         else
16             item->setTextColor(QColor(Qt::black));
17        
18  //输出显示
19         ui->listWidget->addItem(item);    
20     }
21 }

双击屏幕产生信号:

 1 /* 蓝牙连接 */
 2 void Widget::connectBLE(QListWidgetItem *item)
 3 {
 4     QString text = item->text();
 5     int index = text.indexOf(' ');//到空格之前的字节大小
 6     if (index == -1)
 7         return;
 8     QBluetoothAddress address(text.left(index));//返回一个子字符串,该子字符串包含字符串最左边的n个字符。
 9     QString name(text.mid(index + 1));//返回一个字符串,该字符串包含从指定的位置索引开始的n个字符。右边
10     QMessageBox::information(this,tr("Info"),tr("The device is connecting..."));//弹出提示框
11     socket->connectToService(address, QBluetoothUuid(serviceUuid) ,QIODevice::ReadWrite);//建立连接
12 }

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PIC 16F18系列单片机开发 IO口配置与stm32的区别

目录 前言 PIC单片机配置字 电路需要IO口来发挥作用 寄存器和特殊功能寄存器 I/O口 I/O口和单片机内部寄存器之间的对应关系 前言 由于在之前学习嵌入式IDE时候都是直接接触到的是STM32 ARM内核的32位看偏激&#xff0c;现在开发使用的是美国微芯公司推出的PIC系列的单片…

【云原生】kubeadm部署k8s集群

内容预知 架构说明 1.环境准备 2.所有节点安装docker 3. 所有节点安装kubeadm&#xff0c;kubelet和kubectl 4. 部署 Dashboard 5. 安装 部署与k8s集群对接的Harbor仓库 内核参数优化方案 架构说明 前面的文章中&#xff0c;我们采用了二进制包搭建出的k8s集群&#xff…

[附源码]计算机毕业设计动漫电影网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

电子采购软件如何提高企业效率?

企业采购致力于提高生产力和效率&#xff0c;并实现更高的职能和跨职能支出的可见性。电子采购软件解决方案帮助企业实现其目标并做得更多&#xff0c;因此成为了具有前瞻性的采购领导人的明智选择。 以下是使用电子采购软件的四个主要优势&#xff1a;1、降低成本 降低成本是电…

python包管理pip常见操作

一、pip安装 暂略 二、pip常用命令 1、显示版本和路径 pip --version 2、获取帮助 pip --help 3.升级 pip pip install -U pip 4.安装资源包 pip install SomePackage # 最新版本 pip install SomePackage1.0.4 # 指定版本 pip install SomePackage&g…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.8 案例实现TCC 模式【实现】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.8 案例实现TCC 模式【实现】38.8.1 声明TCC 接口38 动手实践 38.8 案例实现TCC 模…

第34篇 网络(四)FTP(二)

导语 前面讲述了一个最简单的FTP客户端程序的编写&#xff0c;这一节我们将这个程序进行扩展&#xff0c;使其可以浏览并能下载服务器上的所有文件。 环境&#xff1a;Windows Xp Qt 4.8.5QtCreator 2.8.0 目录 一、修改界面二、功能实现 正文 一、修改界面 我们删除了T…

当vivo领先后,该学着“快”起来了

文|智能相对论 作者|佘凯文 随着一个个大热球队的爆冷&#xff0c;今年世界杯赛事正在渐入高潮。就目前的形势来看&#xff0c;世界杯最大的悬念在于究竟是“老王”圆梦&#xff0c;还是“新王”登基&#xff0c;又或者是摩洛哥这只黑马一黑到底。 新老球星的更迭&#xff0…

Selenium浏览器自动化测试框架

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google C…

设计模式概述(一)

很多小伙伴&#xff0c;不知道设计模式是什么&#xff1f; 通常我们所说的设计模式是一种设计方案&#xff0c;是前人留下的经验及最佳实践。 想要学习设计模式&#xff0c;至少要把面向对象的基本结构全部了解。 设计模式&#xff0c;是建立在一定基础上的思维训练。 学习设…

macos12.6安装配置opencv4.6.0+opencv contrib4.6.0

1.系统准备好&#xff0c;安装依赖python版本高一点的&#xff0c;并且安装上numpy。 brew install cmake gui及cmake&#xff0c;可能装cmake gui的时候有点问题&#xff0c;先装gui再装cmake。 2.提前下载源码&#xff0c;Releases - OpenCV要求opencv与opencv contrib版本一…

Metal每日分享,UV去雾滤镜效果

本案例的目的是理解如何用Metal实现去雾效果滤镜&#xff0c;类似于UV过滤器&#xff1b; Demo HarbethDemo地址 实操代码 // 去雾效果滤镜 let filter C7Haze.init(distance: 0.5, slope: 0.5)// 方案1: ImageView.image try? BoxxIO(element: originImage, filters: [f…

MyBatis ---- MyBatis的逆向工程

MyBatis ---- MyBatis的逆向工程1. 创建逆向工程的步骤a>添加依赖和插件b>创建MyBatis的核心配置文件c>创建逆向工程的配置文件d>执行MBG插件的generate目标2. QBC查询正向工程&#xff1a;先创建 Java 实体类&#xff0c;由框架负责根据实体类生成数据库表。Hiber…

Spring源码深度解析:十五、@Aspect方式的AOP中篇 - getAdvicesAndAdvisorsForBean

一、前言 文章目录&#xff1a;Spring源码深度解析&#xff1a;文章目录 在上篇中我们概述了Aop 实现的逻辑&#xff0c;但是由于篇幅原因&#xff0c;我们将一部分内容拆成了中篇和下篇内容。本篇即中篇&#xff0c;内容主要是讲述 在 Bean创建过程中Aop 挑选适用于当前Bean…

尚医通-MyBatistPlus:修改和自动填充-乐观锁(三)

目录&#xff1a; &#xff08;1&#xff09;MyBatistPlus&#xff1a;修改和自动填充 &#xff08;2&#xff09;MyBatis-Plus-乐观锁 &#xff08;1&#xff09;MyBatistPlus&#xff1a;修改和自动填充 1、更新操作 注意&#xff1a;update时生成的sql自动是动态sql&…

14 - 局部段描述符表

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 什么是局部段描述符表&#xff08;LDT&#xff09;1.1 局部段描述符选择子1.2 局部段描述符表LDT1.3 问题1.4 LDT的定义和使用2. 编程实验&#xff1a;使用LDT实现新功能3. 多任务程序设计的实现思路4. 待解决的问题&#xff1a;…

第51篇 Qt 5.5全新的开始

导语 时间转眼而逝&#xff0c;看一下上次发的教程&#xff0c;已经是一年前的事情了。这一年发生了很多事情&#xff0c;包括自己也包括Qt。当然&#xff0c;自己很忙或者说为了编写《Qt 5编程入门》这些理由&#xff0c;并不能为一年的搁置进行开脱&#xff0c;所以这里首先…

人工智能前沿——6款AI绘画生成工具

>>>深度学习Tricks&#xff0c;第一时间送达<<< 目录 一、【前言】 二、【6款AI绘画生成工具】 1.DeepAI 2.NightCafe 3.Deep Dream Generator 4.StarryAI 5.Fotor 6.Pixso 一、【前言】 AI不仅影响商业和医疗保健等行业&#xff0c;还在创意产业中…

Flutter Web CORS解决方案2-代理转发协议

Flutter Web CORS解决方案2local-cors-proxyshelf_proxydart run shelf_proxyflutter run --dart-definewrap with shellhelp & usagemode & confrun & debuglaunch with proxyvscodeAndroid Studio遗留问题本文介绍第二种解决FlutterWeb CORS问题的方案&#xff1…

[附源码]Nodejs计算机毕业设计基于web的企业人事管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…