Get relative path from a file in Qt

c++, qdir, qfileinfo, qt, qtcore

Solution

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.

Problem

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.

Original source