【Qt笔记】C++大作业项目报告

项目地址

Github:https://github.com/stephen-zeng/Mobile-Mouse/
Gitee:https://github.com/stephen-zeng/Mobile-Mouse/
QQ空间吃链接是真的蚌埠住🤣

调用的框架&编译框架

  • Qt - 项目大框架,负责调用蓝牙通信,处理传感器数据,连接前后端
  • GUI - 使用QtQuick,类CSS与JS语言风格,从前端开发几乎无缝切换
  • CoreMotion - 天杀的iOS获取个传感器数据还要用原生API,使用Objective-C++,因为Swift不好集成到Qt项目中(我真不想用obj-c++)
  • QMake - QMake的语法相比CMake简单很多,而且原生支持Qt,非常方便
  • cliclick - 负责macOS的鼠标模拟(天杀的macOS不支持原生C++模拟鼠标)
  • windows.h - 负责Windows的鼠标模拟

文件及其作用

前端文件 作用
Client.qml 桌面端程序扫描移动端的界面
Connect.qml 桌面端连接移动端的界面
Footer.qml 所有界面的页脚部分
Header.qml 所有界面的页头部分
Label.qml 标题部分,已集成到Header.qml中
Main.qml 负责页面切换以及检测
Mode.qml 负责检测&选择客户端
Server1.qml 按键操控界面
Server2.qml 传感器操作界面
后端文件 作用
getsensor.h 定义获取传感器数据的接口
getsensor.cpp / getsensor.mm 获取传感器数据
getserver.h / getserver.cpp 负责桌面端的逻辑后端
beserver.h / beserver.cpp 负责移动端的逻辑后端
info.h / info.cpp 移动端的蓝牙信息格式
mousemove.h 定义鼠标移动的接口
mousemove_mac.h / mousemove_mac.cpp 负责macOS的鼠标移动
mousemove_win.h / mousemove_win.cpp 负责Windows的鼠标移动

项目执行逻辑

见下面的思维导图

蓝牙通信过程

桌面端

  1. 创建好蓝牙扫描实例、蓝牙服务发现实例
  2. 定义好蓝牙扫描实例不同信号的处理方式
  3. 开始扫描
  4. 过滤没有名称的设备,过滤重复发现的设备,将新设备写入列表中
  5. 指定连接设备
  6. 开始搜索设备提供的服务
  7. 创建服务实例,保存并比对发现的服务
  8. 连接服务,获取数据
  9. 通过通知服务是否正常来检测连接是否断开(本程序使用的HearRateServer服务带有通知服务)

移动端

  1. 创建广播实例,设置广播的设备名
  2. 定义广播的数据类别,创建广播的数据
  3. 创建广播控制器实例
  4. 定义好广播控制器不同信号的处理方式
  5. 开始广播
  6. 从前端获取数据
  7. 将数据写入广播数据中,并将数据广播

收获

  • Qt提供了非常多好用的API,利用这些API可以快速实现相对复杂的功能。
  • Apple平台在多平台开发当中不是很友好,需要单独进行适配。
  • 用户界面还是用类前端语言比较方便,QWidget迁移到QtQuick应该是大势所趋
  • 对于重要数据的保存要遵循321原则,即三个备份,两种介质,一个异地。在我这两种介质是外置硬盘和内置硬盘,一个异地是云。为什么这么说么?因为有一天晚上我就错误地把getserver.cpp给删掉了,那天晚上简直炸裂🤣

【Qt笔记】C++大作业项目报告
https://学习.fun/ml-note/qt-hw-summary/
Author
Stephen Zeng
Posted on
December 10, 2024
Licensed under