linux系统中利用QT实现蓝牙功能的方法

简介: linux系统中利用QT实现蓝牙功能的方法

      大家好,今天主要和大家分享一下,如何使用QT中的蓝牙功能开发实现。



 

第一:蓝牙功能基本简介

      QT官方提供了蓝牙的相关类和API函数,也提供了相关的历程参考。使用QT的蓝牙历程,其实底层需要有BlueZ协议栈,而Windows没有。

      在Linux开发板上可以外接免驱USB蓝牙,直接在USB接口插上一个USB蓝牙模块就可以实现。

第二:蓝牙应用实例

      QT蓝牙聊天,将蓝牙设置成一个服务器,或者用做客户端,连接手机进行通信。使用QT的时候,需要在项目中添加相应的蓝牙模块,在.pro文件中。

QT += core gui bluetooth

       一个主界面和一个远程选择蓝牙的文件。总的看起来有四大部分,下面就介绍这四大部分的文件。

1 #ifndef CHATCLIENT_H
2 #define CHATCLIENT_H
3
4 #include <qbluetoothserviceinfo.h>
5 #include <QBluetoothSocket>
6 #include <QtCore/QObject>
7
8 QT_FORWARD_DECLARE_CLASS(QBluetoothSocket)
9
10 class ChatClient : public QObject
11 {
12 Q_OBJECT
13
14 public:
15 explicit ChatClient(QObject *parent = nullptr);
16 ~ChatClient();
17
18 /* 开启客户端 */
19 void startClient(const QBluetoothServiceInfo &remoteService);
20
21 /* 停止客户端 */
22 void stopClient();
23
24 public slots:
25 /* 发送消息 */
26 void sendMessage(const QString &message);
27
28 /* 主动断开连接 */
29 void disconnect();
30
31 signals:
32 /* 接收到消息信号 */
33 void messageReceived(const QString &sender, const QString &message);
34
35 /* 连接信号 */
36 void connected(const QString &name);
37
38 /* 断开连接信号 */
39 void disconnected();
40
41 private slots:
42 /* 从 socket 里读取消息 */
43 void readSocket();
44
45 /* 连接 */
46 void connected();
47
48 private:
49 /* socket 通信 */
50 QBluetoothSocket *socket;
51 };
52
53 #endif // CHATCLIENT_H

      chatclient.h 文件主要是客户端的头文件,其中写一些接口,比如开启客户端,关闭客户端, 接收信号与关闭信号等等。chatclient.cpp 的代码如下。

1 #include "chatclient.h"
2 #include <qbluetoothsocket.h>
3
4 ChatClient::ChatClient(QObject *parent)
5 : QObject(parent), socket(0)
6 {
7 }
8
9 ChatClient::~ChatClient()
10 {
11 stopClient();
12 }
13
14 /* 开启客户端 */
15 void ChatClient::startClient(const QBluetoothServiceInfo 
&remoteService)
16 {
17 if (socket)
18 return;
19 
20 // Connect to service
21 socket = new 
QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
22 qDebug() << "Create socket";
23 socket->connectToService(remoteService);
24 qDebug() << "ConnectToService done";
25 
26 connect(socket, SIGNAL(readyRead()),
27 this, SLOT(readSocket()));
28 connect(socket, SIGNAL(connected()),
29 this, SLOT(connected()));
30 connect(socket, SIGNAL(disconnected()),
31 this, SIGNAL(disconnected()));
32 }
33
34 /* 停止客户端 */
35 void ChatClient::stopClient()
36 {
37 delete socket;
38 socket = 0;
39 }
40
41 /* 从 Socket 读取消息 */
42 void ChatClient::readSocket()
43 {
44 if (!socket)
45 return;
46 
47 while (socket->canReadLine()) {
48 QByteArray line = socket->readLine();
49 emit messageReceived(socket->peerName(),
50 QString::fromUtf8(line.constData(),
51 line.length()));
52 }
53 }
54
55 /* 发送的消息 */
56 void ChatClient::sendMessage(const QString &message)
57 {
58 qDebug()<<"Sending data in client: " + message;
59 
60 QByteArray text = message.toUtf8() + '\n';
61 socket->write(text);
62 }
63
64 /* 主动连接 */
65 void ChatClient::connected()
66 {
67 emit connected(socket->peerName());
68 }
69
70 /* 主动断开连接*/
71 void ChatClient::disconnect() {
72 qDebug()<<"Going to disconnect in client";
73 if (socket) {
74 qDebug()<<"diconnecting...";
75 socket->close();
76 }
77 }

分析:我们需要开启客户端模式,那么我们需要将扫描服务器(手机蓝牙)的结果, 实例化一个蓝牙 socket,使用 socket 连接传入来的服务器信息,即可将本地蓝牙当作客户端, 实现了客户端创建。

总结:QT中蓝牙相关的API函数,功能实现是比较齐全的,通过长时间的的坚持与练习,一定会有所收获。

目录
相关文章
|
1月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
149 3
Linux系统禁用swap
|
1月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
198 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
174 0
Linux系统初始化脚本
|
2月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
161 18
|
1月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
162 1
|
1月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
655 1
|
2月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
1079 10
|
1月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
300 1
二、Linux文本处理与文件操作核心命令
|
1月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
556 56