在Qt Creator中加载具有相对路径的文件

时间:2016-02-17 17:03:55

标签: c++ linux qt ubuntu qt-creator

我正在使用Ubuntu 14.04中的Qt Creator 3.1.1编写C ++程序。此代码使用现有库从磁盘加载文件,方法是将表示路径的字符串传递给该文件。我遇到的麻烦是当字符串表示绝对路径时,文件加载正常,但是当字符串表示相对路径时,它无法加载,说它找不到文件。

我的项目包含/home/karnivaurus/project/src的源文件,并在/home/karnivaurus/project/build构建文件。我在每个目录中以及项目根目录mesh.stl中放置了文件/home/karnivaurus/project的副本。但是当我传递字符串../src/mesh.stl../build/mesh.stl../mesh.stl时,它无法加载。它也因/../src/mesh.stl/../build/mesh.stl../src/mesh.stl../build/mesh.stl../mesh.stl而失败。

但是,如果我传递字符串/home/karnivaurus/project/src/mesh.stl/home/karnivaurus/project/build/mesh.stl/home/karnivaurus/project/mesh.stl,它会找到该文件。

这是为什么?我对C ++中相对路径的理解是一个问题吗?或者是我需要在Qt Creator中配置的东西?在我的Qt Creator设置中,我将工作目录设置为/home/karnivaurus/project/build

我用来加载网格的确切行是:

const aiScene* mesh = MeshLib::loadMesh("../mesh.stl");

相应的错误消息是:

Failed opening file '/mesh.stl' for reading: No such file or directory

此错误消息对我来说是可疑的,因为/mesh.stl不等同于../mesh.stl ...

1 个答案:

答案 0 :(得分:1)

看起来您已经确定工作目录是正确的。鉴于这种可能性已被消除,剩下的就是第三方库中的错误。

您可以使用Qt构建绝对路径:

QString meshPath = QDir().filePath("../mesh.stl"); 
const aiScene* mesh = MeshLib::loadMesh(meshPath.toLatin1().data());

这可以作为解决方案,直到库的开发人员修复错误。