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函数,功能实现是比较齐全的,通过长时间的的坚持与练习,一定会有所收获。

目录
相关文章
|
6天前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
22 5
linux系统服务二!
|
6天前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
23 3
linux系统服务!!!
|
6天前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
23 2
|
7天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
8天前
|
Linux Shell 数据库
文件查找是Linux用户日常工作的重要技能介绍了几种不常见的文件查找方法
文件查找是Linux用户日常工作的重要技能。本文介绍了几种不常见的文件查找方法,包括使用`find`和`column`组合、`locate`和`mlocate`快速查找、编写Shell脚本、使用现代工具`fd`、结合`grep`搜索文件内容,以及图形界面工具如`Gnome Search Tool`和`Albert`。这些方法能显著提升文件查找的效率和准确性。
28 2
|
10天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
56 3
|
11天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
17天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
121 5
|
17天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
53 4