-–
name: “project-assistant”
description: “Records project requirements, issues, solutions, and lessons learned during Qt/C++ development. Invoke when user wants to document project experience or create project knowledge base.”
-–
# 项目经验记录助手
## 项目概述
**项目名称**: 时间戳转换器 (Timestamp Converter)
**技术栈**: C++ / Qt5 / MinGW
**开发环境**: Windows + Qt 5.10.0 + MinGW 5.3.0
-–
## 需求分析
### 核心功能
1. 批量转换时间戳(秒级、毫秒级、微秒级、纳秒级)
2. 自动识别时间戳格式
3. 支持多种分隔符(空格、逗号、换行)
4. 可视化界面展示结果
5. 一键复制转换结果
### 技术需求
- 使用 Qt 框架开发 GUI
- 打包成独立可执行文件
- 支持中文界面
-–
## 遇到的问题与解决方案
### 1. 编译环境问题
**问题**: `qmake` 报错 “failed to parse default search paths from compiler output”
**原因**:
- 环境变量未正确设置
- qmake 无法找到编译器
**解决方案**:
```batch
set QT_DIR=D:\tool\qt\5.10.0\mingw53_32
set MINGW_DIR=D:\tool\qt\Tools\mingw530_32
set PATH=%QT_DIR%\bin;%MINGW_DIR%\bin;%PATH%
set QMAKESPEC=win32-g++
```
### 2. 缺少头文件
**问题**: `‘QClipboard’ has not been declared`
**解决方案**:
```cpp
#include
```
### 3. 链接时优化 (LTO) 与 Qt 不兼容
**问题**:
```
undefined reference to `QString::QString(char const*) [clone .lto_priv…]’
```
**原因**: `-flto` 链接时优化与 Qt 的 QString 有兼容性问题
**解决方案**: 从 .pro 文件中移除 `-flto` 选项
### 4. 图标格式问题
**问题**: `windres: icon file does not contain icon data`
**原因**: Qt 的 `RC_ICONS` 需要 `.ico` 格式,不支持 `.png`
**解决方案**:
```qmake
win32: RC_ICONS = ico/1.ico
```
### 5. C++ 标准兼容性问题
**问题**: Qt 5.10 与 `CONFIG += c++17` 不兼容
**错误信息**:
```
‘std::size_t’ has not been declared
‘qsizetype’ was not declared in this scope
```
**解决方案**: 使用 C++11 标准
```qmake
CONFIG += c++11
```
### 6. 运行时缺少 DLL
**问题**: 找不到 `libgcc_s_dw2-1.dll`
**解决方案**:
- 使用 `windeployqt` 时****不要****加 `–no-compiler-runtime` 参数
- 或者手动复制 MinGW 的 DLL 文件
### 7. 批处理脚本编码问题
**问题**: 中文输出显示为乱码
**解决方案**:
```batch
chcp 65001 >nul REM 设置 UTF-8 编码
```
-–
## 项目文件结构
```
timestamp-converter-qt/
├── main.cpp # 程序入口
├── mainwindow.cpp/h # 主窗口
├── timestampconverter.cpp/h # 转换核心逻辑
├── TimestampConverter.pro # Qt 项目配置
├── build.bat # 编译脚本
├── build_clean.bat # 清理编译脚本
├── ico/
│ └── 1.ico # 应用程序图标
├── release/ # 编译输出
└── deploy/ # 部署目录
```
-–
## 关键配置
### TimestampConverter.pro
```qmake
QT += core gui widgets
CONFIG += c++11
TARGET = TimestampConverter
TEMPLATE = app
SOURCES += main.cpp mainwindow.cpp timestampconverter.cpp
HEADERS += mainwindow.h timestampconverter.h
win32: RC_ICONS = ico/1.ico
```
### 编译脚本要点
```batch
set QT_DIR=D:\tool\qt\5.10.0\mingw53_32
set MINGW_DIR=D:\tool\qt\Tools\mingw530_32
set PATH=%QT_DIR%\bin;%MINGW_DIR%\bin;%PATH%
qmake -spec win32-g++ “CONFIG+=release” TimestampConverter.pro
mingw32-make release
windeployqt release\TimestampConverter.exe --release
```
-–
## 经验教训
1. **Qt 版本兼容性**: Qt 5.10 较老,使用 C++17 会有问题,建议用 C++11
2. **LTO 优化**: 与 Qt 库不兼容,避免使用
3. **图标格式**: Windows 程序必须使用 `.ico` 格式
4. **DLL 部署**: `windeployqt` 默认不包含编译器运行时,需要手动处理
5. **编码问题**: Windows 批处理使用 UTF-8 需要 `chcp 65001`
-–
## 常用命令
```bash
# 清理构建
mingw32-make clean
rmdir /S /Q release debug
# 生成 Makefile
qmake -spec win32-g++ CONFIG+=release
# 编译
mingw32-make -j4 release
# 部署
windeployqt TimestampConverter.exe --release
```
-–
## 参考资源
- Qt 文档: https://doc.qt.io/
- MinGW 文档: http://www.mingw.org/
- UPX 压缩: https://upx.github.io/
