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 网络安全
在Linux上安装软件有多种方法
在Linux上安装软件有多种方法
108 64
|
1月前
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
77 3
(13) Qt事件系统(two)
|
18天前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
38 2
|
24天前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
25 1
|
24天前
|
运维 安全 Linux
Linux文件清空的五种方法总结分享
每种方法各有优势,选择最合适的一种或几种,可以极大提高您的工作效率。更多有关Linux系统管理的技巧与资源,欢迎访问,持续提升您的运维技能。
62 1
|
1月前
|
编解码 程序员
(12)Qt事件系统(one)
本文详细介绍了Qt事件系统,包括各种系统事件、鼠标事件、键盘事件、定时器等的处理方法和示例代码。
70 0
(12)Qt事件系统(one)
|
1月前
|
Linux 数据安全/隐私保护 索引
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
43 1
|
安全 Java Linux
产品百科 |Ali RTC Linux 基本功能介绍(Java)
阿里云 RTC 的基本功能包含创建实例、加入频道、本地发布、录制和离开频道等。
产品百科 |Ali RTC Linux 基本功能介绍(Java)
|
6天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
24 3
|
6天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
18 2