Files
0417_QT_code/REGENERATE_MIGRATION.md

203 lines
4.7 KiB
Markdown
Raw Permalink Normal View History

2026-03-26 10:45:29 +08:00
# 重新生成项目后的代码移植方法
这份说明的目标是:
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. 再做一次编译验证
你只要把新工程路径告诉我即可。