Files
0417_QT_code/REGENERATE_MIGRATION.md
2026-03-26 10:45:29 +08:00

203 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 重新生成项目后的代码移植方法
这份说明的目标是:
1. 重新新建一个干净的 Qt Widgets 工程。
2. 不沿用旧工程的 `.sln / .vcxproj / .vs / x64`
3. 只把当前已经实现好的业务代码移植过去。
这样最稳,也最不容易把旧工程状态带进来。
## 一、建议的新建方式
在 Visual Studio 里重新新建一个 Qt Widgets Application。
建议保持这些配置:
- Qt`5.13.1`
- 平台:`x64`
- 编译器:和你当前环境一致
- Qt Modules`core;gui;widgets`
新工程创建完成后,先确保它能空工程编译通过一次。
## 二、不要移植的内容
下面这些不要从旧工程复制过去:
- `.vs/`
- `x64/`
- `20260320.*` 这些中间目录
- 旧的 `.sln`
- 旧的 `.vcxproj`
- 旧的 `.vcxproj.filters`
- 旧的 `.vcxproj.user`
- `Browse.VC.db` 一类缓存
原则很简单:
只移植源码,不移植工程缓存和生成物。
## 三、需要复制过去的目录和文件
把下面这些直接复制到新工程根目录:
- `APP/`
- `DRI/`
- `LOGIC/`
- `EXTEN/`
- `main.cpp`
如果你想保留当前这套界面和调试窗口,这些就是最小必需集合。
## 四、可以不要的旧模板文件
如果新工程自动生成了自己的 `MainWindow` 或其他模板文件,而你准备直接用当前这套代码,那么这些模板文件可以删掉或从工程里移除。
当前仓库里这些文件不是主链必需:
- `_new_keyboard.cpp`
- `_new_keyboard.h`
- `_new_keyboard.ui`
- `_new_keyboard.qrc`
它们现在没有参与主入口逻辑。
## 五、把文件加回新工程的方法
推荐用 Visual Studio 的“添加现有项”。
### 1. 源文件加入工程
把这些 `.cpp` 加到新工程:
- `APP\\APP_ChatGptButton.cpp`
- `APP\\APP_DebugPanel.cpp`
- `APP\\APP_GlassCard.cpp`
- `APP\\APP_KeyButton.cpp`
- `APP\\APP_ThemeSwitch.cpp`
- `APP\\APP_UIWindow.cpp`
- `DRI\\DRI_DeviceState.cpp`
- `DRI\\DRI_HidDevice.cpp`
- `EXTEN\\EXTEN_Theme.cpp`
- `LOGIC\\LOGIC_DeviceSession.cpp`
- `LOGIC\\LOGIC_HidProtocol.cpp`
- `LOGIC\\LOGIC_KeypadModel.cpp`
- `main.cpp`
### 2. 头文件加入工程
把这些 `.h` 加到新工程:
- `APP\\APP_ChatGptButton.h`
- `APP\\APP_DebugPanel.h`
- `APP\\APP_GlassCard.h`
- `APP\\APP_KeyButton.h`
- `APP\\APP_ThemeSwitch.h`
- `APP\\APP_UIWindow.h`
- `DRI\\DRI_DeviceState.h`
- `DRI\\DRI_HidDevice.h`
- `EXTEN\\EXTEN_Theme.h`
- `LOGIC\\LOGIC_DeviceSession.h`
- `LOGIC\\LOGIC_HidProtocol.h`
- `LOGIC\\LOGIC_KeypadModel.h`
## 六、新工程需要保留的工程设置
请确认新工程至少有这些设置:
### 1. Include 目录
`C/C++ -> Additional Include Directories`
至少包含:
- `$(ProjectDir)`
这样代码里的这类包含才能工作:
- `#include "APP/APP_UIWindow.h"`
- `#include "DRI/DRI_HidDevice.h"`
- `#include "LOGIC/LOGIC_HidProtocol.h"`
### 2. Qt 模块
保持:
- `core`
- `gui`
- `widgets`
### 3. 字符集
保持:
- `Unicode`
### 4. UTF-8 编译
建议保留:
- `/utf-8`
## 七、这套代码迁移时有一个好处
当前新增代码已经特意改成了“普通 C++ 回调”,不是自定义 Qt 信号/槽项目项。
这意味着迁移时:
- 不需要额外手工加 `QtMoc` 条目
- 不需要改 `.vcxproj` 去注册新 moc 头
- 只要把 `.cpp/.h` 作为普通源码文件加进去即可
这一步会明显降低“工程能编但 VS 打不开”这类问题。
## 八、HID 相关设置
`DRI\\DRI_HidDevice.cpp` 里已经用了:
- `#pragma comment(lib, "hid.lib")`
- `#pragma comment(lib, "setupapi.lib")`
所以一般不需要你再手工去 Linker 里加库。
只要是 Windows 桌面工程即可。
## 九、迁移后你应该先验证什么
迁移完成后,不要先看业务联动,先按这个顺序验证:
1. 工程能正常打开
2. 工程能 `Debug|x64` 编译通过
3. 程序能启动
4. 主界面正常显示
5. 下方调试窗口正常显示
6. 能枚举到 `VID=0x1209 / PID=0x0001 / UsagePage=0xFF00 / Usage=0x0002`
7. 能看到收到的原始包
8. 能看到 `0x04` 包的中文解析
## 十、最稳的实际操作顺序
推荐直接按下面顺序做:
1. 新建一个全新的 Qt Widgets 工程
2. 先空工程编译一次
3. 关闭 VS
4.`APP/DRI/LOGIC/EXTEN/main.cpp` 复制过去
5. 删除新模板里不用的 `MainWindow` 一类文件
6. 打开新工程
7. 用“添加现有项”把上面列出的 `.cpp/.h` 加入工程
8. 检查 Qt modules 和 include 目录
9. 编译
10. 接设备验证调试窗口
## 十一、如果你想让我继续帮你做
如果你重新生成了一个新工程目录,我可以直接帮你做这几件事:
1. 把当前代码拷过去
2. 帮你把新 `.vcxproj` 补成可编译状态
3. 再做一次编译验证
你只要把新工程路径告诉我即可。