从Qt中的一个文件获取相对路径

23

我想从我想要写入的文件中获取相对路径。这里是一个情况:

我将一个配置文件保存在D:\confs\conf.txt。我的程序中有一些从D:\images\image.bmp读取的文件。在我的conf.txt中,我想要有../images/image.bmp

我看到了一些有用的类,如QDirQFileInfo,但我不知道该使用哪个最好。我尝试过:

QDir dir("D:/confs");
dir.filePath(D:/images/image.bmp) // Just return the absolute path of image.bmp
我看了文档,它说filePath只能与目录设置(这里是D:\confs)中的文件一起使用,但我想知道是否有一种方法可以指示从不同的目录搜索并获取其相对路径。
2个回答

21

您正在寻找以下方法:

QString QDir::relativeFilePath(const QString & fileName) const

返回与该目录相关的fileName的路径。

QDir dir("/home/bob");
QString s;

s = dir.relativeFilePath("images/file.jpg");     // s is "images/file.jpg"
s = dir.relativeFilePath("/home/mary/file.txt"); // s is "../mary/file.txt"

根据上面的示例调整您的代码,它将如下所示:

QDir dir("D:/confs");
dir.relativeFilePath("D:/images/image.bmp") // Just return the absolute path of image.bmp
//           ^                   ^

总的来说,你所做的可能是一个坏主意,因为它将配置和图像路径耦合在一起。也就是说,如果你移动任何一个路径,应用程序都会停止工作。

请注意还有缺失引号。


谢谢,它运行得很好。我应该更仔细地阅读有关QDir的文档。我知道这可能有风险,但是配置可以导出到其他计算机,因此如果同时导出配置文件夹和图像文件夹(保持相对路径),应用程序将不会崩溃。 - user3627590

4
QDir dir("D:/confs");
dir.relativeFilePath("D:/images/image.bmp");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接