Get relative path from a file in Qt

user3627590 picture user3627590 · Jun 2, 2014 · Viewed 27.4k times · Source

I am trying to get the relative path from files that I would like to write. Here a situation:

I save a conf file in D:\confs\conf.txt. I have in my programs some files read from D:\images\image.bmp. In my conf.txt I would like to have ../images/image.bmp.

I see some useful classes like QDir or QFileInfo but I don't know what it's the best to use. I tried:

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

I read the doc and it says filePath only work with files in the dir set (here D:\confs) but I wonder if there is a way to indicate to search from a different dir and get his relative path.

Answer

lpapp picture lpapp · Jun 2, 2014

You are looking for the following method:

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

Returns the path to fileName relative to the directory.

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"

Adapting your code according to the examples above, it will look as follows:

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

Overall, what you do might be a bad idea since it will couple the config and image paths together. I.e. if you move either of them, the application stops working.

Please also notice the missing quotes.