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

4.7 KiB
Raw Blame History

重新生成项目后的代码移植方法

这份说明的目标是:

  1. 重新新建一个干净的 Qt Widgets 工程。
  2. 不沿用旧工程的 .sln / .vcxproj / .vs / x64
  3. 只把当前已经实现好的业务代码移植过去。

这样最稳,也最不容易把旧工程状态带进来。

一、建议的新建方式

在 Visual Studio 里重新新建一个 Qt Widgets Application。

建议保持这些配置:

  • Qt5.13.1
  • 平台:x64
  • 编译器:和你当前环境一致
  • Qt Modulescore;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. 再做一次编译验证

你只要把新工程路径告诉我即可。