Qt项目如何不使用.qrc添加动态资源并处理大体积可编辑文件
Qt项目路径配置解决方案
核心思路
不用把work文件夹塞进.qrc,而是通过固定相对路径规则+Qt获取程序运行目录来实现所有文件的便捷引用,同时保留work文件夹的可编辑性和大文件存储的灵活性。
具体实现步骤
1. 固定相对路径结构
保持现有目录结构不变,约定:
- 程序运行时默认以项目根目录(
mainWindow.cpp所在目录)作为工作目录 core.exe的相对路径固定为:Resource/bin/core.exe- 各task的
config.xml、run.bat路径为Resource/work/taskX/下的对应文件
2. 用Qt获取绝对路径(提升可靠性)
如果担心程序运行时工作目录被修改,可通过Qt接口获取程序所在绝对路径,再拼接目标文件路径:
// 获取程序所在目录的绝对路径 QString appDir = QCoreApplication::applicationDirPath(); // 拼接core.exe的绝对路径 QString coreExePath = QDir(appDir).filePath("Resource/bin/core.exe"); // 拼接task1的run.bat路径 QString task1BatPath = QDir(appDir).filePath("Resource/work/task1/run.bat");
3. 调整run.bat脚本
确保脚本能正确调用core.exe,有两种方式:
- 方式一:基于项目根目录的相对路径调用(前提是程序工作目录为项目根)
@echo off :: 从bat所在目录跳回项目根 cd ..\..\ Resource\bin\core.exe :: 回到当前task目录继续处理 cd Resource\work\task1 :: 生成输出到当前output文件夹
- 方式二:通过Qt传递绝对路径参数
在Qt代码中调用bat时传入core.exe的绝对路径:
QProcess process; process.start(task1BatPath, QStringList() << coreExePath);
然后在run.bat中直接使用参数:
@echo off :: %1为Qt传递的core.exe绝对路径 %1 :: 后续处理逻辑
4. 大文件输出处理
run.bat直接将数据写入当前task下的output文件夹即可,无需Qt介入,既避免大文件进入项目资源,又方便用户在对应目录查看输出。
额外注意事项
- 发布程序时,需将
Resource文件夹与程序exe放在同一目录,保持相对路径结构不变 - 若需支持用户自定义
work文件夹位置,可在程序中增加配置项,让用户选择路径后动态拼接所有文件路径
内容的提问来源于stack exchange,提问作者KangDG
相关产品推荐
相关产品推荐

