更新至QT6

This commit is contained in:
CaiXiang
2025-11-27 14:22:15 +08:00
parent b0c4d5c475
commit 696b2048ee
28 changed files with 2054 additions and 66 deletions

View File

@@ -1,69 +1,424 @@
# 编译说明
# AGV 路径跟踪系统 - 编译说明
## 重要提示
本文档提供完整的编译说明,包括 Qt6 GUI 应用程序和 CAN 通信模块。
在重新编译之前,请**先关闭正在运行的 `agv_qt_gui.exe` 程序**
## 📋 目录
- [系统要求](#系统要求)
- [Qt6 GUI 编译(推荐)](#qt6-gui-编译推荐)
- [命令行程序编译](#命令行程序编译)
- [常见问题](#常见问题)
- [验证安装](#验证安装)
检测到程序正在运行进程ID: 2996需要先关闭才能重新编译。
---
## 关闭程序的方法
## 系统要求
### 方法1: 通过任务管理器
1.`Ctrl + Shift + Esc` 打开任务管理器
2. 找到 `agv_qt_gui.exe` 进程
3. 右键点击,选择"结束任务"
### 必需组件
- **编译器**:
- Windows: MinGW-w64 13.1+ 或 MSVC 2019+
- Linux: GCC 9.0+ 或 Clang 10.0+
- **CMake**: 3.10 或更高版本
- **C++ 标准**: C++17
### 方法2: 通过命令行
**Windows命令提示符**不是Git Bash中运行
```cmd
taskkill /F /PID 2996
```
### Qt6 GUI 所需
- **Qt6**: 6.x 或更高版本
- 必需组件: Qt6::Widgets
- 推荐版本: Qt 6.10.1
- **编译器匹配**:
- Qt6 MinGW 版本 → MinGW 编译器
- Qt6 MSVC 版本 → MSVC 编译器
或者查找并关闭所有 agv_qt_gui 进程:
```cmd
taskkill /F /IM agv_qt_gui.exe
```
### CAN 通信所需
- **ControlCAN 库**: lib/ControlCAN.lib
- **支持的设备**: USBCAN-2A, USBCAN-2C
## 编译步骤
---
关闭程序后,执行以下命令重新编译:
## Qt6 GUI 编译(推荐)
### Windows (MinGW)
#### 步骤 1: 安装 Qt6
从 [Qt 官网](https://www.qt.io/download) 下载并安装 Qt6
- 安装路径示例: `C:\Qt\6.10.1`
- 选择组件: MinGW 64-bit, Qt6 Widgets
#### 步骤 2: 清理构建目录
```bash
cd build
cmake --build . --config Release
rm -rf *
cd ..
```
或者如果需要Debug版本
#### 步骤 3: 配置 CMake
**方法 1: 使用完整路径(推荐)**
```bash
cmake --build . --config Debug
cd build
cmake -G "MinGW Makefiles" \
-DCMAKE_PREFIX_PATH=C:/Qt/6.10.1/mingw_64 \
-DCMAKE_C_COMPILER=C:/Qt/Tools/mingw1310_64/bin/gcc.exe \
-DCMAKE_CXX_COMPILER=C:/Qt/Tools/mingw1310_64/bin/g++.exe \
-DCMAKE_MAKE_PROGRAM=C:/Qt/Tools/mingw1310_64/bin/mingw32-make.exe ..
```
## 编译成功的标志
如果编译成功,应该看到:
```
agv_qt_gui.vcxproj -> C:\work\AGV\AGV运动规划\agv_path_tracking\build\Release\agv_qt_gui.exe
```
## 运行修复后的程序
编译成功后,运行:
**方法 2: 设置环境变量**
```bash
# Release版本
./build/Release/agv_qt_gui.exe
# 设置 Qt 路径
export CMAKE_PREFIX_PATH=/c/Qt/6.10.1/mingw_64
export PATH=/c/Qt/Tools/mingw1310_64/bin:$PATH
# 或 Debug版本
./build/Debug/agv_qt_gui.exe
# 配置
cd build
cmake -G "MinGW Makefiles" ..
```
然后测试"Load from CSV"功能,特别是:
1. 尝试加载包含中文路径的CSV文件
2. 尝试加载各种格式的CSV文件
#### 步骤 4: 编译
## 已修复的问题
```bash
# 使用多线程编译(-j4 表示 4 个线程)
cmake --build . -j4
✓ Windows路径编码问题主要原因
✓ 单点路径处理
✓ 异常处理改进
# 或者指定 Release 模式
cmake --build . --config Release -j4
```
所有修改已应用到源代码,只需重新编译即可生效。
#### 步骤 5: 验证
检查生成的可执行文件:
```bash
ls -lh agv_qt_gui.exe
# 应该显示类似: -rwxr-xr-x 1 user group 558K Nov 27 13:33 agv_qt_gui.exe
```
#### 步骤 6: 运行
```bash
# 直接运行(需要 Qt DLL 在 PATH 中)
./agv_qt_gui.exe
# 或者添加 Qt bin 目录到 PATH
export PATH=/c/Qt/6.10.1/mingw_64/bin:$PATH
./agv_qt_gui.exe
```
---
### Windows (MSVC)
#### 前提条件
- 安装 Visual Studio 2019 或 2022
- 安装 Qt6 MSVC 版本(例如 msvc2019_64
#### 配置和编译
```bash
cd build
cmake -G "Visual Studio 17 2022" -A x64 \
-DCMAKE_PREFIX_PATH=C:/Qt/6.10.1/msvc2019_64 ..
cmake --build . --config Release -j4
```
#### 运行
```bash
# 添加 Qt DLL 路径
set PATH=C:\Qt\6.10.1\msvc2019_64\bin;%PATH%
# 运行
Release\agv_qt_gui.exe
```
---
### Linux
#### 步骤 1: 安装依赖
**Ubuntu/Debian:**
```bash
sudo apt update
sudo apt install build-essential cmake qt6-base-dev
```
**Fedora:**
```bash
sudo dnf install gcc-c++ cmake qt6-qtbase-devel
```
**Arch Linux:**
```bash
sudo pacman -S base-devel cmake qt6-base
```
#### 步骤 2: 编译
```bash
mkdir -p build && cd build
cmake ..
make -j$(nproc)
```
#### 步骤 3: 运行
```bash
./agv_qt_gui
```
---
## 命令行程序编译
如果只需要编译命令行程序(不含 Qt GUI可以使用更简单的方法
### 基本编译
```bash
cd build
cmake ..
cmake --build .
```
### 生成的可执行文件
编译完成后,在 `build/` 目录下会生成以下程序:
| 程序名称 | 功能描述 |
|---------|---------|
| `agv_demo.exe` | 基本路径跟踪演示 |
| `generate_data.exe` | 生成测试数据 |
| `generate_smooth_path.exe` | 平滑路径生成器 |
| `agv_gui.exe` | 控制台 GUI 演示 |
| `curtis_demo.exe` | Curtis 电机控制器键盘演示 |
| `curtis_path_tracking_demo.exe` | Curtis 路径跟踪演示 |
| `agv_qt_gui.exe` | Qt6 图形界面(需要 Qt6 |
---
## 常见问题
### 问题 1: CMake 找不到 Qt6
**错误信息:**
```
CMake Error at CMakeLists.txt:65 (find_package):
By not providing "FindQt6.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Qt6", but
CMake did not find one.
```
**解决方案:**
**方法 1:** 设置 `CMAKE_PREFIX_PATH`
```bash
cmake -DCMAKE_PREFIX_PATH=C:/Qt/6.10.1/mingw_64 ..
```
**方法 2:** 设置环境变量
```bash
# Windows (Git Bash)
export CMAKE_PREFIX_PATH=/c/Qt/6.10.1/mingw_64
# Windows (CMD)
set CMAKE_PREFIX_PATH=C:\Qt\6.10.1\mingw_64
# Linux
export CMAKE_PREFIX_PATH=/opt/Qt/6.10.1/gcc_64
```
---
### 问题 2: 编译器不匹配
**错误信息:**
```
error: undefined reference to `__imp__ZN7QWidget...'
```
**原因:** Qt6 MinGW 版本与 MSVC 编译器不兼容。
**解决方案:**
- 使用 MinGW 编译 MinGW 版 Qt6
- 或安装 MSVC 版 Qt6 并使用 MSVC 编译
---
### 问题 3: 程序运行时缺少 DLL
**错误信息:**
```
The code execution cannot proceed because Qt6Core.dll was not found.
```
**解决方案 1:** 添加 Qt bin 目录到 PATH
```bash
# Windows (Git Bash)
export PATH=/c/Qt/6.10.1/mingw_64/bin:$PATH
# Windows (CMD)
set PATH=C:\Qt\6.10.1\mingw_64\bin;%PATH%
```
**解决方案 2:** 部署应用程序(推荐用于发布)
参见 [Qt6 部署指南](QT6_DEPLOYMENT_GUIDE.md)
---
### 问题 4: 编译时提示程序正在运行
**错误信息:**
```
cannot create agv_qt_gui.exe: Permission denied
```
**解决方案:**
关闭正在运行的 `agv_qt_gui.exe` 进程:
**Windows 任务管理器:**
1.`Ctrl + Shift + Esc`
2. 找到 `agv_qt_gui.exe`
3. 右键 → 结束任务
**命令行:**
```bash
# Windows
taskkill /F /IM agv_qt_gui.exe
# Linux
pkill -9 agv_qt_gui
```
---
### 问题 5: CMake 版本过低
**错误信息:**
```
CMake 3.5 or higher is required. You are running version 2.8.12
```
**解决方案:**
更新 CMake
**Windows:**
从 [CMake 官网](https://cmake.org/download/) 下载最新版本
**Linux:**
```bash
# Ubuntu (添加官方 PPA)
sudo apt-get remove cmake
sudo snap install cmake --classic
# 或从源码编译
wget https://github.com/Kitware/CMake/releases/download/v3.28.0/cmake-3.28.0.tar.gz
tar -xzvf cmake-3.28.0.tar.gz
cd cmake-3.28.0
./bootstrap && make && sudo make install
```
---
## 验证安装
### 检查 Qt6 安装
```bash
# 检查 qmake
qmake --version
# 应输出: QMake version 3.1, Using Qt version 6.x.x
# 检查 Qt6Config.cmake
ls C:/Qt/6.10.1/mingw_64/lib/cmake/Qt6/Qt6Config.cmake
# 应显示文件存在
```
### 检查编译器
```bash
# MinGW
gcc --version
g++ --version
# 应输出: gcc/g++ (MinGW-W64) 13.1.0 或更高
# MSVC (Visual Studio Developer Command Prompt)
cl
# 应输出: Microsoft (R) C/C++ Optimizing Compiler Version 19.xx
```
### 检查 CMake
```bash
cmake --version
# 应输出: cmake version 3.10 或更高
```
---
## 清理构建
如果需要重新开始:
```bash
# 清理构建目录
cd build
rm -rf *
# 或者删除并重建
cd ..
rm -rf build
mkdir build
cd build
```
---
## 构建配置选项
### 调试模式 vs 发布模式
```bash
# Debug 模式(包含调试符号,未优化)
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build .
# Release 模式(优化,无调试符号)
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
```
### 指定安装路径
```bash
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
cmake --build .
sudo cmake --install .
```
### 只构建特定目标
```bash
# 只构建 Qt GUI
cmake --build . --target agv_qt_gui
# 只构建 Curtis 演示
cmake --build . --target curtis_demo
```
---
## 下一步
- 📖 运行程序: [QUICK_START.md](QUICK_START.md)
- 🚀 部署应用: [QT6_DEPLOYMENT_GUIDE.md](QT6_DEPLOYMENT_GUIDE.md)
- 🔧 CAN 通信: [../can/CAN_README.md](../can/CAN_README.md)
- 🎨 自定义路径: [../custom_path/README.md](../custom_path/README.md)
---
**最后更新:** 2025-11-27
**Qt 版本:** 6.10.1
**CMake 版本:** 3.10+
**编译器:** MinGW 13.1.0, GCC 9.0+, MSVC 2019+

View File

@@ -0,0 +1,634 @@
# Qt6 应用程序部署指南
本指南详细说明如何将 Qt6 GUI 应用程序(`agv_qt_gui.exe`)部署到其他计算机,使其能够独立运行而无需安装 Qt。
## 📋 目录
- [部署方法概述](#部署方法概述)
- [方法 1: 使用 windeployqt推荐](#方法-1-使用-windeployqt推荐)
- [方法 2: 手动复制依赖](#方法-2-手动复制依赖)
- [方法 3: 静态链接](#方法-3-静态链接)
- [Linux 部署](#linux-部署)
- [测试部署包](#测试部署包)
- [常见问题](#常见问题)
---
## 部署方法概述
Qt 应用程序部署有三种主要方法:
| 方法 | 优点 | 缺点 | 适用场景 |
|------|------|------|---------|
| **windeployqt** | 自动、快速、简单 | 包体积较大(~50MB | 推荐,适合大多数情况 |
| **手动复制** | 精确控制,体积可优化 | 需要手动查找依赖 | 高级用户,需要精简包 |
| **静态链接** | 单一可执行文件,最小依赖 | 编译慢,体积大(~30MB | 商业发布 |
---
## 方法 1: 使用 windeployqt推荐
`windeployqt` 是 Qt 官方提供的部署工具,可自动收集所有必需的 DLL、插件和资源。
### Windows (MinGW) 部署
#### 步骤 1: 创建部署目录
```bash
# 在项目根目录下创建发布目录
mkdir -p release_package
cd release_package
```
#### 步骤 2: 复制可执行文件
```bash
# 复制编译好的 exe
cp ../build/agv_qt_gui.exe .
# 复制必需的数据文件(如果有)
# cp -r ../data .
# cp -r ../config .
```
#### 步骤 3: 运行 windeployqt
```bash
# 添加 Qt bin 目录到 PATH临时
export PATH=/c/Qt/6.10.1/mingw_64/bin:$PATH
# 运行 windeployqt
windeployqt agv_qt_gui.exe
# 或者使用完整路径
/c/Qt/6.10.1/mingw_64/bin/windeployqt.exe agv_qt_gui.exe
```
**参数说明:**
```bash
# 基本部署
windeployqt agv_qt_gui.exe
# Release 模式(不包含调试信息)
windeployqt --release agv_qt_gui.exe
# 指定编译器
windeployqt --compiler-runtime agv_qt_gui.exe
# 显示详细信息
windeployqt --verbose 2 agv_qt_gui.exe
# 不复制编译器运行时
windeployqt --no-compiler-runtime agv_qt_gui.exe
```
#### 步骤 4: 添加 MinGW 运行时(如需要)
```bash
# 复制 MinGW 运行时 DLL
cp /c/Qt/Tools/mingw1310_64/bin/libgcc_s_seh-1.dll .
cp /c/Qt/Tools/mingw1310_64/bin/libstdc++-6.dll .
cp /c/Qt/Tools/mingw1310_64/bin/libwinpthread-1.dll .
```
#### 步骤 5: 复制 ControlCAN 库AGV 特定)
```bash
# 复制 CAN 通信库
cp ../lib/ControlCAN.dll . # 如果存在 DLL 版本
```
#### 步骤 6: 创建启动脚本(可选)
创建 `run.bat`:
```batch
@echo off
echo Starting AGV Path Tracking GUI...
agv_qt_gui.exe
if errorlevel 1 (
echo Program exited with error code %errorlevel%
pause
)
```
#### 完整自动化脚本
创建 `deploy_windows.sh`:
```bash
#!/bin/bash
# Qt6 部署脚本 for Windows MinGW
# 配置
QT_DIR="/c/Qt/6.10.1/mingw_64"
MINGW_DIR="/c/Qt/Tools/mingw1310_64"
BUILD_DIR="../build"
DEPLOY_DIR="release_package"
EXE_NAME="agv_qt_gui.exe"
echo "=== AGV Qt6 GUI 部署脚本 ==="
# 1. 创建部署目录
echo "[1/6] 创建部署目录..."
rm -rf "$DEPLOY_DIR"
mkdir -p "$DEPLOY_DIR"
# 2. 复制可执行文件
echo "[2/6] 复制可执行文件..."
if [ ! -f "$BUILD_DIR/$EXE_NAME" ]; then
echo "错误: 找不到 $BUILD_DIR/$EXE_NAME"
echo "请先编译项目!"
exit 1
fi
cp "$BUILD_DIR/$EXE_NAME" "$DEPLOY_DIR/"
# 3. 运行 windeployqt
echo "[3/6] 运行 windeployqt..."
cd "$DEPLOY_DIR"
"$QT_DIR/bin/windeployqt.exe" --release --no-translations "$EXE_NAME"
# 4. 复制 MinGW 运行时
echo "[4/6] 复制 MinGW 运行时..."
cp "$MINGW_DIR/bin/libgcc_s_seh-1.dll" .
cp "$MINGW_DIR/bin/libstdc++-6.dll" .
cp "$MINGW_DIR/bin/libwinpthread-1.dll" .
# 5. 复制 CAN 库(如果存在)
echo "[5/6] 复制 CAN 库..."
if [ -f "../lib/ControlCAN.dll" ]; then
cp "../lib/ControlCAN.dll" .
fi
# 6. 创建启动脚本
echo "[6/6] 创建启动脚本..."
cat > run.bat << 'EOF'
@echo off
echo ========================================
echo AGV Path Tracking Control System
echo Qt6 GUI Application
echo ========================================
echo.
agv_qt_gui.exe
if errorlevel 1 (
echo.
echo Program exited with error code %errorlevel%
pause
)
EOF
cd ..
# 显示结果
echo ""
echo "=== 部署完成! ==="
echo "部署目录: $DEPLOY_DIR"
echo "可执行文件: $EXE_NAME"
echo ""
echo "目录内容:"
ls -lh "$DEPLOY_DIR" | head -20
# 计算大小
TOTAL_SIZE=$(du -sh "$DEPLOY_DIR" | cut -f1)
echo ""
echo "总大小: $TOTAL_SIZE"
echo ""
echo "现在可以将 '$DEPLOY_DIR' 文件夹复制到其他计算机运行!"
```
使用部署脚本:
```bash
chmod +x deploy_windows.sh
./deploy_windows.sh
```
---
### Windows (MSVC) 部署
与 MinGW 类似,但需要使用 MSVC 版本的 Qt 和运行时:
```bash
# 使用 MSVC 版 Qt
C:\Qt\6.10.1\msvc2019_64\bin\windeployqt.exe --release agv_qt_gui.exe
# MSVC 运行时通常由 windeployqt 自动包含
# 如果没有,需要安装 Visual C++ Redistributable
```
---
## 方法 2: 手动复制依赖
如果需要精确控制部署内容或 `windeployqt` 不可用:
### 步骤 1: 确定依赖的 DLL
使用 `ldd``depends.exe` 查看依赖:
```bash
# 使用 ldd (Git Bash / MSYS2)
ldd build/agv_qt_gui.exe
# 输出示例:
# Qt6Core.dll
# Qt6Gui.dll
# Qt6Widgets.dll
# libgcc_s_seh-1.dll
# libstdc++-6.dll
# libwinpthread-1.dll
```
### 步骤 2: 复制核心 Qt DLL
```bash
cd release_package
# Qt6 核心库
cp /c/Qt/6.10.1/mingw_64/bin/Qt6Core.dll .
cp /c/Qt/6.10.1/mingw_64/bin/Qt6Gui.dll .
cp /c/Qt/6.10.1/mingw_64/bin/Qt6Widgets.dll .
```
### 步骤 3: 复制平台插件
```bash
# 创建 platforms 目录
mkdir -p platforms
# 复制 Windows 平台插件
cp /c/Qt/6.10.1/mingw_64/plugins/platforms/qwindows.dll platforms/
```
### 步骤 4: 复制样式插件(可选)
```bash
# 创建 styles 目录
mkdir -p styles
# 复制 Windows 样式
cp /c/Qt/6.10.1/mingw_64/plugins/styles/qwindowsvistastyle.dll styles/
```
### 步骤 5: 复制编译器运行时
```bash
# MinGW 运行时
cp /c/Qt/Tools/mingw1310_64/bin/libgcc_s_seh-1.dll .
cp /c/Qt/Tools/mingw1310_64/bin/libstdc++-6.dll .
cp /c/Qt/Tools/mingw1310_64/bin/libwinpthread-1.dll .
```
### 最小部署结构
```
release_package/
├── agv_qt_gui.exe # 主程序
├── Qt6Core.dll # Qt 核心
├── Qt6Gui.dll # Qt GUI
├── Qt6Widgets.dll # Qt Widgets
├── libgcc_s_seh-1.dll # GCC 运行时
├── libstdc++-6.dll # C++ 标准库
├── libwinpthread-1.dll # 线程库
├── ControlCAN.dll # CAN 通信库(如需要)
└── platforms/ # 平台插件目录
└── qwindows.dll # Windows 平台插件
```
---
## 方法 3: 静态链接
静态链接将所有依赖编译进可执行文件,生成单一的 exe但需要静态版 Qt
### 前提条件
- 需要从源码编译静态版 Qt6耗时较长
- 或者购买商业版 Qt包含静态库
### 编译静态 Qt6
```bash
# 下载 Qt 源码
git clone https://code.qt.io/qt/qt5.git qt6-static
cd qt6-static
git checkout 6.10.1
# 配置静态编译
./configure -static -prefix C:/Qt/6.10.1-static -release -nomake examples -nomake tests
# 编译(需要数小时)
cmake --build . --parallel
cmake --install .
```
### 使用静态 Qt 编译项目
```bash
cd build
cmake -DCMAKE_PREFIX_PATH=C:/Qt/6.10.1-static ..
cmake --build . --config Release
```
静态编译的 exe 大约 30-50MB但不需要任何 DLL。
---
## Linux 部署
### 使用系统包管理器(推荐)
```bash
# Ubuntu/Debian
sudo apt install qt6-base-dev
# 用户安装后从包管理器安装 Qt6 即可运行
```
### 使用 AppImage便携
创建 AppImage 可部署到任何 Linux 发行版:
```bash
# 安装 linuxdeployqt
wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
chmod +x linuxdeployqt-continuous-x86_64.AppImage
# 准备 AppDir
mkdir -p AppDir/usr/bin
cp build/agv_qt_gui AppDir/usr/bin/
# 创建 desktop 文件
cat > AppDir/agv_qt_gui.desktop << EOF
[Desktop Entry]
Type=Application
Name=AGV Path Tracking
Exec=agv_qt_gui
Icon=agv_icon
Categories=Development;
EOF
# 运行 linuxdeployqt
./linuxdeployqt-continuous-x86_64.AppImage AppDir/usr/bin/agv_qt_gui -appimage
# 生成 agv_qt_gui-x86_64.AppImage
```
---
## 测试部署包
### 在干净环境中测试
**方法 1: 使用虚拟机**
- 创建 Windows 虚拟机VirtualBox / VMware
- 不安装 Qt 和 MinGW
- 复制 `release_package` 文件夹
- 运行 `agv_qt_gui.exe`
**方法 2: 使用其他电脑**
- 找一台没有安装 Qt 的电脑
- 复制部署包
- 双击运行
**方法 3: 临时重命名 Qt 目录**
```bash
# 重命名 Qt 目录(临时测试)
mv /c/Qt /c/Qt_backup
# 测试部署的程序
cd release_package
./agv_qt_gui.exe
# 测试完成后恢复
mv /c/Qt_backup /c/Qt
```
### 检查清单
- [ ] 程序能正常启动
- [ ] 主窗口正常显示
- [ ] 所有控件可交互
- [ ] 路径生成功能正常
- [ ] CSV 文件加载正常
- [ ] 动画播放正常
- [ ] 没有"缺少 DLL"错误
---
## 常见问题
### 问题 1: 启动时报错"缺少 Qt6Core.dll"
**原因:** Qt 核心库未包含
**解决方案:**
```bash
# 重新运行 windeployqt
cd release_package
/c/Qt/6.10.1/mingw_64/bin/windeployqt.exe agv_qt_gui.exe
# 或手动复制
cp /c/Qt/6.10.1/mingw_64/bin/Qt6Core.dll .
```
---
### 问题 2: 启动时报错"找不到平台插件 'windows'"
**原因:** 缺少平台插件
**解决方案:**
```bash
mkdir -p platforms
cp /c/Qt/6.10.1/mingw_64/plugins/platforms/qwindows.dll platforms/
```
---
### 问题 3: 程序启动后立即崩溃
**原因:** 缺少 MinGW 运行时或编译器不匹配
**解决方案:**
```bash
# 复制 MinGW 运行时
cp /c/Qt/Tools/mingw1310_64/bin/libgcc_s_seh-1.dll .
cp /c/Qt/Tools/mingw1310_64/bin/libstdc++-6.dll .
cp /c/Qt/Tools/mingw1310_64/bin/libwinpthread-1.dll .
```
---
### 问题 4: 部署包过大(>100MB
**原因:** windeployqt 包含了不必要的文件
**优化方案:**
```bash
# 使用精简选项
windeployqt --release --no-translations --no-system-d3d-compiler agv_qt_gui.exe
# 删除不需要的插件
rm -rf iconengines imageformats/qtiff.dll imageformats/qwebp.dll
# 删除调试符号
find . -name "*.pdb" -delete
```
---
### 问题 5: 中文路径显示乱码
**原因:** 缺少字体或编码设置
**解决方案:**
```bash
# 确保使用 UTF-8 编码
# 在程序开始时添加:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
```
---
## 部署包优化
### 减小体积
```bash
# 1. 删除不需要的翻译文件
rm -rf translations
# 2. 删除不需要的图像格式插件
cd imageformats
rm -f qicns.dll qico.dll qtga.dll qtiff.dll qwbmp.dll qwebp.dll
cd ..
# 3. 使用 UPX 压缩(可选)
upx --best agv_qt_gui.exe
upx --best *.dll
```
### 创建安装程序
使用 NSIS 或 Inno Setup 创建安装程序:
**Inno Setup 示例脚本 (deploy.iss):**
```ini
[Setup]
AppName=AGV Path Tracking
AppVersion=1.0
DefaultDirName={pf}\AGV Path Tracking
DefaultGroupName=AGV Tools
OutputDir=installer
OutputBaseFilename=AGV_PathTracking_Setup
[Files]
Source: "release_package\*"; DestDir: "{app}"; Flags: recursesubdirs
[Icons]
Name: "{group}\AGV Path Tracking"; Filename: "{app}\agv_qt_gui.exe"
Name: "{commondesktop}\AGV Path Tracking"; Filename: "{app}\agv_qt_gui.exe"
```
编译安装程序:
```bash
iscc deploy.iss
```
---
## 部署检查脚本
创建 `check_deployment.sh`:
```bash
#!/bin/bash
DEPLOY_DIR="release_package"
EXE="agv_qt_gui.exe"
echo "=== AGV Qt6 部署检查 ==="
echo ""
# 1. 检查可执行文件
if [ -f "$DEPLOY_DIR/$EXE" ]; then
echo "✓ 可执行文件存在"
else
echo "✗ 缺少可执行文件"
exit 1
fi
# 2. 检查必需的 DLL
REQUIRED_DLLS=(
"Qt6Core.dll"
"Qt6Gui.dll"
"Qt6Widgets.dll"
"libgcc_s_seh-1.dll"
"libstdc++-6.dll"
"libwinpthread-1.dll"
)
cd "$DEPLOY_DIR"
for dll in "${REQUIRED_DLLS[@]}"; do
if [ -f "$dll" ]; then
echo "✓ $dll"
else
echo "✗ 缺少 $dll"
fi
done
# 3. 检查平台插件
if [ -f "platforms/qwindows.dll" ]; then
echo "✓ platforms/qwindows.dll"
else
echo "✗ 缺少 platforms/qwindows.dll"
fi
# 4. 计算总大小
echo ""
echo "部署包大小:"
du -sh .
# 5. 列出所有 DLL
echo ""
echo "包含的 DLL 文件:"
find . -name "*.dll" | wc -l
echo "个文件"
cd ..
echo ""
echo "检查完成!"
```
---
## 总结
### 推荐的部署流程
1. **开发阶段**: 使用完整 Qt 开发环境
2. **测试阶段**: 使用 `windeployqt` 创建部署包
3. **发布阶段**: 优化部署包,创建安装程序
### 部署清单
- [ ] 编译 Release 版本
- [ ] 运行 `windeployqt`
- [ ] 复制 MinGW 运行时
- [ ] 复制项目特定依赖ControlCAN.dll
- [ ] 在干净环境测试
- [ ] 优化体积
- [ ] 创建安装程序(可选)
- [ ] 编写用户手册
---
## 相关资源
- **Qt 官方文档**: [Deploying Qt Applications](https://doc.qt.io/qt-6/deployment.html)
- **windeployqt 文档**: [Qt for Windows - Deployment](https://doc.qt.io/qt-6/windows-deployment.html)
- **依赖检查工具**: [Dependency Walker](http://www.dependencywalker.com/)
---
**最后更新:** 2025-11-27
**Qt 版本:** 6.10.1
**平台:** Windows MinGW, Windows MSVC, Linux

View File

@@ -1,6 +1,51 @@
# 快速使用指南 - 完整路径追踪
# 快速使用指南 - AGV Qt6 GUI
## 问题
## 📌 更新说明
**项目已升级到 Qt6**2025-11-27
- Qt 版本: 6.10.1
- 编译器: MinGW 13.1.0
- 详细编译说明: [BUILD_INSTRUCTIONS.md](BUILD_INSTRUCTIONS.md)
- 部署指南: [QT6_DEPLOYMENT_GUIDE.md](QT6_DEPLOYMENT_GUIDE.md)
---
## 快速开始
### 1. 编译项目(首次使用)
```bash
# 配置Windows MinGW
cd build
cmake -G "MinGW Makefiles" \
-DCMAKE_PREFIX_PATH=C:/Qt/6.10.1/mingw_64 \
-DCMAKE_C_COMPILER=C:/Qt/Tools/mingw1310_64/bin/gcc.exe \
-DCMAKE_CXX_COMPILER=C:/Qt/Tools/mingw1310_64/bin/g++.exe \
-DCMAKE_MAKE_PROGRAM=C:/Qt/Tools/mingw1310_64/bin/mingw32-make.exe ..
# 编译
cmake --build . -j4
```
### 2. 运行程序
```bash
# 确保 Qt DLL 在 PATH 中
export PATH=/c/Qt/6.10.1/mingw_64/bin:$PATH
# 运行
./agv_qt_gui.exe
```
或使用以下命令一次性运行:
```bash
PATH=/c/Qt/6.10.1/mingw_64/bin:$PATH ./build/agv_qt_gui.exe
```
---
## 路径跟踪功能
### 问题
❌ trajectory路径只有一段无法完整追踪reference path
## 解决方案
@@ -114,6 +159,8 @@ A: C4267警告size_t转int是良性的不影响功能可以忽略。
---
**更新日期**: 2025-11-14
**版本**: v1.1
**状态**: 已修复已编译测试
**更新日期**: 2025-11-27
**版本**: v2.0
**状态**: Qt6 升级完成已编译测试
**Qt 版本**: 6.10.1
**编译器**: MinGW 13.1.0