基于 QT-Android 的计划/健身/学习类软件--MousePlan

基于 QT-Android 的计划/健身/学习类软件--MousePlan

H_Haozi Lv3

A 引入

因为学院不让实习来着,所以这学期办了一张健身卡,锻炼身体还能调整作息,一直想找一个非常适合查看每天该练什么,多少次,多少重量,还能打卡记录的相关软件,但是感觉都不是那么契合,要么是会员模式,要么是普通的计划表,要么是一些我不那么喜欢的APP

于是我思索一番,要不然自己写一个得了,虽然自己是学嵌入式的,但是AI当下,大不了我指挥AI开始操作,在我挑选代码平台的时候,想起来QT作为一个跨平台语言,还是我学过的C++,这样AI写完还能自己缝缝补补,妙哉

于是,这个历经五天完成第一代版本的破烂小APP出现了


下面还是主要看看经过的历程,以及简单介绍并学习一下AI写的框架

B 环境搭建及AI使用过程

这里的环境分为三部分,分别是QT环境,QT的Android环境,以及最终要的AI环境


B.1 QT环境

QT的环境比较简单,只要去官网下载然后安装,只用注意三点:

  1. QT对于 QT5.15/QT6版本不再支持离线安装包安装,我这里使用的是 QT5.12.8,下载方式网上有很多,这里就不多说了; 注意,如果QT的版本为5.9+,那么自带Android构建工具链,安卓环境配置会非常简单
  2. 不要下载 QT 5.12.9,问就是我在这个版本安装Android环境卡了很久还是失败了
  3. 下载完QT之后,在安装组件的界面需要勾选 qt for android套件,如果已经安装过QT了,可以去安装目录下的MaintenanceTool.exe,运行这个程序重新添加套件

B.2 QT-Android环境

对于低版本的QT,在构建Android环境的时候 需要准备一些东西,比如Java,android SDK、NDK,如果手边没有设备还要下个安卓的虚拟机方便调试代码

但是这些环境不是什么版本都可以,需要根据你QT的具体版本来选择,我最开始的环境配置参考的别人的blog CSDN Qt 5.14.2+Android环境搭建

这里的具体配置大家可以安装QT之后参考如下路径查找一个配置文件:
C:\Users\Mouse\AppData\Roaming\QtProject\qtcreator\android\sdk_definitions.json

给出我的文件具体内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"common": {
"sdk_tools_url": {
"linux": "https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip",
"linux_sha256": "92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9",
"windows": "https://dl.google.com/android/repository/sdk-tools-windows-4333796.zip",
"windows_sha256": "7e81d69c303e47a4f0e748a6352d85cd0c8fd90a5a95ae4e076b5e5f960d3c7a",
"mac": "https://dl.google.com/android/repository/sdk-tools-darwin-4333796.zip",
"mac_sha256": "ecb29358bc0f13d7c2fa0f9290135a5b608e38434aad9bf7067d0252c160853e"
},
"sdk_essential_packages": {
"default": ["platform-tools", "platforms;android-29"],
"linux": [],
"mac": [],
"windows": ["extras;google;usb_driver"]
}
},
"specific_qt_versions": [
{
"versions": ["default"],
"sdk_essential_packages": ["build-tools;29.0.2", "ndk;21.1.6352462"],
"ndk_path": "ndk/21.1.6352462"
},
{
"versions": ["5.12.[0-5]", "5.13.[0-1]"],
"sdk_essential_packages": ["build-tools;28.0.2", "ndk;19.2.5345600"],
"ndk_path": "ndk/19.2.5345600"
}
]
}

这里面会给出需要的SDK和NDK的参考版本信息,然后参考上面给的教程下载并配置到QT就行了

B.3 AI环境

因为申请了github的学生会员,所以可以免费使用 GitHub Copilot Pro 的权限,这也是我肆无忌惮使用AI写一个简单的软件的原因

当然,我只要成功写一个在手机上显示”Hello World”的程序,那么Agent就可以帮我写任何东西,只要我给它一份初始3000字的提示词,以及高达几万的补充提示词,还要负责bug测试即可,这样就可以简单的得到一份APP啦,完结撒花!


B.4 使用AI

一开始,我是直接详细描述我需要一个怎么样的APP,需要哪些界面,每个界面是干什么的,以及我自定义的一个结构体,用来存储相关数据;

但是我发现,如果是一个泛化的目标,AI执行下来不论是逻辑还是界面都差强人意,没有达到我的预期

于是我在这个的基础上:

单独描述每个界面: 登录界面,预加载界面,进入之后的主界面,导航栏界面,个人中心界面……

单独描述每个逻辑内容:登录的校验逻辑,个人中心的信息保存逻辑,总计划(自定义的结构体数据)的保存和修改逻辑,对于预览界面的滑动逻辑…..

单独描述参数:界面各个的高度为整个屏幕的几分之几,滑动的灵敏度参数,保存的时机…..

单独描述某些功能的实现方式:保存文件,从相册选取照片,下载东西 应该调用Android哪些接口

单独描述网络相关的内容: 生成应用端和服务端的相关文件,配置文件,执行文件(然后自行部署到云服务器上 ps:这个网络部分的协议我觉得AI生成的还是非常完善的,基本问题不大)

再一步步的纠正下,勉强达到了预期,但是又有一个大问题,就是最开始我并没有要求AI并没为我创建一个合适的架构来分隔不同功能的代码,它将所有界面功能写在了两三个文件里面,比如”mainwindow.cpp”,同时除了函数命名外,基本没有适合阅读的注释,使得代码臃肿难以阅读

于是我大手一挥,给AI发去指令 “在保持当前逻辑功能和界面显示不变的情况下,重构代码,让其分层更有逻辑,并且补充每个函数的注释,注释不能使用泛化语句,必须具体”

不愧是我,轻轻松松解决了上面的问题

吸取之前的教训,我认为直接让AI写一个功能完善的APP还是有点困难 ps:当然,未来的AI大人一定可以的

所以后面的非健身主题的软件我打算自己动点手,防止AI全盘介入,可能效率和界面美观上可以更优一点


C APP架构介绍

因为健身模块部分基本为AI完成,我主要阅读了一下整体的布局和功能,然后修改了一下架构,下面通过软件整体、主题功能、网络功能三个部分介绍一下


C.1 软件介绍

正如我开头所说,这是一个计划类的记录软件APP,我目前将它分成了三个主题模式,其一便是已经有了雏形的健身模式,剩余两个分别是 学习模式普通模式

下面主要给出 工程架构 emm 看起来还是太臃肿了,但凑合看看吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Mouse_Plan/
|-- main.cpp # Qt 应用入口
|-- mainwindow.h # MainWindow 类声明
|-- mainwindow.cpp # MainWindow 壳文件(实现已迁移到 modules)
|-- mainwindow.ui # Qt Designer UI 文件
|-- appdata.h # 数据模型与存储接口
|-- appdata.cpp # 本地存储与 JSON 序列化
|-- img.qrc # Qt 资源索引
|-- Mouse_Plan_2.pro # qmake 项目文件
|-- Mouse_Plan_2.pro.user # Qt Creator 本地用户配置
|-- Mouse_Plan_2.code-workspace # VS Code 工作区文件
|-- README.md # 项目架构文档
|-- .vscode/ # 本地编辑器配置
|-- config/ # 全局相关的配置文件
|-- img/ # 图片资源
|-- android/ # Android 打包配置--略

|
|-- modules/ # 分层应用代码(按 common/themes/ui 拆分)
| |-- common/ # 跨主题通用能力层
| | |-- agreement/ # 协议文本加载与模式切换(本地/在线)
| | | |-- agreement_text_loader.h # 协议加载器接口
| | | \-- agreement_text_loader.cpp # 协议文件读取与回退逻辑实现
| | |-- config/ # 公共配置常量
| | | \-- network_config.h # 网络地址与接口配置常量
| | |-- theme/ # 主题策略与可用性控制
| | | |-- theme_feature_gate.h # 主题开关/可用性判断接口
| | | |-- theme_feature_gate.cpp # 主题可用性拦截实现
| | | |-- theme_strategy_factory.h # 主题策略工厂接口
| | | \-- theme_strategy_factory.cpp # 主题策略分发与构建实现
| | |-- ui/ # 公共 UI 构建与弹窗工具
| | | |-- common_ui_pages.cpp # 通用页面片段创建
| | | |-- runtime_dialog_helpers.h # 运行时弹窗工具接口
| | | \-- runtime_dialog_helpers.cpp # 运行时弹窗工具实现
| | \-- update/ # 应用更新辅助能力
| | |-- update_client_helper.h # 更新客户端接口
| | \-- update_client_helper.cpp # 更新检查与下载辅助实现
| |
| |-- themes/ # 主题业务层(按主题拆分)
| | \-- fitness/ # 健身主题业务
| | |-- calendar/ # 日历标记与日期展示
| | | |-- fitness_calendar_mark_builder.h # 日历标记构建接口
| | | \-- fitness_calendar_mark_builder.cpp # 日历训练/休息标记生成
| | |-- data/ # 健身主题数据模型与仓储
| | | |-- fitness_data_models.h # 健身业务数据结构
| | | |-- fitness_data_repository.h # 数据仓储接口
| | | \-- fitness_data_repository.cpp # 数据读取与聚合实现
| | |-- network/ # 健身主题网络接口定义
| | | |-- fitness_online_api.h # 在线 API 声明
| | | \-- fitness_online_api.cpp # 在线 API 常量实现
| | \-- plan/ # 计划与记录核心流程
| | |-- fitness_plan_flow_helper.h # 计划流程辅助接口
| | |-- fitness_plan_flow_helper.cpp # 计划流程计算实现
| | |-- fitness_plan_runtime.cpp # 计划运行时公共逻辑
| | |-- fitness_plan_item_actions.cpp # 计划项操作(完成/忽略/编辑)
| | |-- fitness_training_record_actions.cpp # 训练记录提交与补录
| | \-- mainwindow_fitness_plan_manager.cpp # 计划管理页与主窗口联动
| |
| \-- ui/ # 主窗口交互层(按页面功能拆分)
| |-- common/ # 启动、登录后流程等主线逻辑
| | |-- mainwindow_bootstrap.cpp # MainWindow 初始化与启动流程
| | \-- mainwindow_session_flow.cpp # 会话流程、页面切换与状态同步
| |-- home/ # 首页相关实现预留目录
| |-- login/ # 登录与注册流程
| | |-- login_register_flow.h # 登录/注册流程接口
| | \-- login_register_flow.cpp # 登录/注册流程实现
| |-- profile/ # 个人中心相关交互
| | |-- profile_interaction_helper.h # 个人中心交互辅助接口
| | |-- profile_interaction_helper.cpp # 个人中心交互辅助实现
| | \-- mainwindow_profile_actions.cpp # 主窗口个人页动作实现
| \-- theme/ # 主题切换与账号主题行为
| |-- mainwindow_theme_actions.cpp # 主窗口主题相关动作实现
| \-- theme_account_actions.cpp # 主题与账号联动动作实现
|
|-- MousePlan_Server/ # Node.js 后端服务
| |-- .env
| |-- .gitignore
| |-- .htaccess
| |-- Mouse_Add_code #添加注册码的服务器接口
| |-- package.json
| |-- package-lock.json
| |-- README.md #使用文档
| |-- src/
| | |-- config.js
| | |-- db.js
| | \-- index.js
| |-- data/
| | |-- .gitkeep
| | |-- db.json # 服务器数据的json串
| | \-- updates/ # APK/更新包投放目录
| \-- node_modules/ # 已安装 npm 依赖相关

软件的整体入口在mainwindow_bootstrap.cpp 文件里面,预加载的模块在main.cpp,整个软件目前的数据结构为都定义在appdata文件中

程序通过一个预加载的界面,直接进入登录界面,登录界面判定成功后进入软件的主界面(新用户会先进入主题选择的界面,根据不同的选择,进入不同的Home界面),不同主题拥有不同的功能


C.2 主题介绍

就是每个主题的具体功能和流程


C.2.1 主题一 健身主题

默认主题就是健身主题,也是用AI写这个APP的最初目的,下面给出该主题的功能

对于本地模式:

  1. 总计划功能:设置单/多个健身总计划,分别包括练习的周期以及每天的具体训练内容,比如动作名称,热身和正式组的具体内容等,当然还有开始的时间和休息日的时间
  2. 日历映射功能:可以选择设置的总计划为当前计划,然后该计划的内容会按照总计划预设映射到日历组件上,这样可以通过点击日历查看以后的计划,对于当天的内容会直接预览出来
  3. 打卡功能:对于当天的每个项目,可以主动勾选打钩表示完成,当所有项目完成后,可以进行打卡提交记录,会在对应日期保存当天的训练记录和时间
  4. 总计划导出/导入:总计划数据包可以导出,方便因特殊原因的总计划丢失

在这三个的基础上,可以添加补录间歇时间提醒食物热量/营养计算体重记录总数据备份等功能

对于在线模式,在本地模式的基础上:

  1. 可以注册登录: 保留专门的ID,可以在不同设备上登录,同步数据
  2. 数据保存: 当打卡之后,相关数据会更新至服务器,这样即便卸载软件,更换手机数据也不会丢失
  3. 在线计划: 用户可以分享或者上传自己的总计划至服务器,方便好友或者他人直接下载借鉴 (还没实现)

注: 仅在打卡的时候会尝试保存一次数据,所以只要登录过一次(有登录记忆),除了联网功能,可以当做本地模式使用


C.3.2 主题三 学习主题

还没有实现,有想法和建议可以告诉我


C.3.3 主题三 日常主题

还没有实现,有想法和建议可以告诉我


C.3 云服务器网络服务相关介绍

我的小破服务器肯定没办法支持很多数据的并发和存储,所有我预留了服务器设置的接口,大家可以直接将服务器端的文件一键部署到自己的云服务器,然后在软件的”服务器设置”界面填入自己的服务器地址,具体的使用方法可以直接查看服务端文件的README.md文件或者简单参考下面的内容:

Mouse Plan 提供了简单的服务器端接口,用户可将服务端文件部署到自己的云服务器,并在软件的“服务器设置”界面填入服务器地址

服务端功能

  1. 注册码管理

    • 支持注册码的生成与验证。
  2. 数据同步

    • 支持用户数据的上传与下载。
  3. 更新检查

    • 检查是否有新版本可用。

服务端部署方法

  1. 环境准备

    • 安装 Node.js 和 npm。
    • 确保服务器支持 HTTP 请求。
  2. 克隆代码仓库

    1
    2
    git clone https://github.com/Hunhaozi/MousePlan.git
    cd MousePlan_Server
  3. 安装依赖

    1
    npm install
  4. 配置环境变量

    • 创建 .env 文件,设置以下内容:分别是服务器的端口号与数据存储位置

      1
      2
      PORT=3000     
      DB_PATH=./data/db.json
  5. 启动服务

    1
    npm start

    服务启动后,访问 http://localhost:3000,如果配置为自己服务器,那么将该地址直接填入APP的服务器设置选项中则可以直接使用

  6. 部署到生产环境

    • 使用 PM2 或其他进程管理工具保持服务运行:

      1
      2
      npm install -g pm2
      pm2 start src/index.js --name MousePlan_Server
    • 配置 Nginx 或 Apache 反向代理以支持 HTTPS。

F APP使用方法相关

当前的APP内容极度不完善,因为AI写的还是有点小乱,可能还会有很多bug,下面我会慢慢添加修改功能和修复bug,一定不是因为我的Copilot Pro额度用完了

对于软件的登录,本地模式可以直接登录使用,对于在线模式账号的发放并不是使用短信验证码或者其它第三方登录,而是使用简单的注册码模式,如果感兴趣的可以直接下方留言或者发邮箱找我要注册码,然后体验当前的测试版本APP

G 文件地址

Github 项目地址
MousePlan APP下载地址 – 也是Github

参考文献

  1. AI 大人天下无敌

留言

有问题请指出,你可以选择以下方式:

  1. 在下方评论区留言
  2. 邮箱留言
  • Title: 基于 QT-Android 的计划/健身/学习类软件--MousePlan
  • Author: H_Haozi
  • Created at : 2026-03-20 19:34:56
  • Updated at : 2026-03-24 16:57:07
  • Link: https://blog.haozi-haozi.cn/2026/03/20/Qt-MousePlan-Android/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments