web-dev-qa-db-fra.com

Récupère le chemin relatif d'un fichier dans Qt

J'essaye d'obtenir le chemin relatif des fichiers que j'aimerais écrire. Voici une situation:

J'enregistre un fichier de conf dans D:\confs\conf.txt. J'ai dans mes programmes des fichiers lus depuis D:\images\image.bmp. Dans mon conf.txt Je voudrais avoir ../images/image.bmp.

Je vois des classes utiles comme QDir ou QFileInfo mais je ne sais pas quel est le meilleur à utiliser. J'ai essayé:

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

J'ai lu le document et il est dit filePath ne fonctionne qu'avec les fichiers de l'ensemble dir (ici D:\confs) mais je me demande s'il existe un moyen d'indiquer de chercher à partir d'un répertoire différent et d'obtenir son chemin relatif.

19
user3627590

Vous recherchez la méthode suivante:

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

Renvoie le chemin d'accès à fileName par rapport au répertoire.

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"

En adaptant votre code selon les exemples ci-dessus, il ressemblera à ceci:

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

Dans l'ensemble, ce que vous faites peut être une mauvaise idée car il associera la configuration et les chemins d'image ensemble. C'est à dire. si vous déplacez l'un d'eux, l'application cesse de fonctionner.

Veuillez également noter les citations manquantes.

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