Search code examples
c++qtqtcoreqdirqfileinfo

Get relative path from a file in Qt


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.


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.