2010-10-05 3 views
2

Je ne vois pas cela dans la documentation partout, donc il n'existe probablement pas, mais juste au cas où:chemin du fichier QImage

j'ai une fonction qui accepte comme paramètre un vecteur de QImages. Chaque QImage a été chargé à partir du disque à un moment donné et n'a pas été modifié - il est simplement lu à partir de. Idéalement, ce que je voudrais faire est de boucler toutes les QImages et de sortir une liste de leurs chemins d'accès à un fichier XML.

Malheureusement, je ne vois pas dans la documentation le moyen d'obtenir le chemin d'origine du fichier à partir duquel l'image a été chargée. Donc, ma question est, est-il possible, donné seulement QImage, de comprendre quel chemin d'accès le fichier QImage a été chargé ou non?

Quelque chose le long des lignes de:

QString QImage :: getOriginalFilepath();

Je sais que c'est probablement une question futile, mais il vaut toujours la peine de demander, je suppose.

(j'utilise Qt 4.7, en passant.)

+1

Une fois l'image chargée, elle n'est pas liée à l'endroit où elle est chargée. donc aucune information n'est enregistrée sur le chemin du fichier. – Donotalo

Répondre

4

Je regardais à travers le code, et que l'information ne semble pas être enregistré nulle part. QImage :: load (et le constructeur) utilise QImageReader (nomFichier, format) .read(), puis copie le résultat dans lui-même. QImageReader est configuré pour supprimer la représentation de l'appareil (l'objet fichier ouvert) dès que la lecture est terminée. Donc, en résumé, il semble que ce n'est pas possible.

4

Aussi pour moi il semble que QImage ne fournit pas une interface pour obtenir son chemin. Je pense aussi que ce n'est pas une fonctionnalité manquante, car il n'est pas nécessaire d'attacher un QImage à un chemin spécifique. Dans la majorité des cas d'utilisation, QImage n'a pas de fichier physique correspondant.

Donc, la meilleure façon dans votre situation serait de sous-classe QImage et ajouter cette fonctionnalité:

class MyImage : public QImage { 
    QString path_; 
public: 
    MyImage(const QString& path); 
    QString path(); // getter 
}; 

Je laisse de côté les détails de mise en œuvre.

+1

QImages ne sont pas QObjects, donc la macro est erronée. J'utiliserais aussi une structure Foobar {QImage image; QString path; } au lieu, ou quelque chose, au lieu de sous-classement inutile. –

+0

Merci pour l'indice. – WolfgangA

+0

Je pense que le sous-classement ici est absolument utile car @quadelirus veut utiliser toutes les fonctionnalités d'un QImage et pas seulement un sous-ensemble (dans ce cas, une relation has-a serait meilleure). Je ne vois aucun avantage à utiliser une structure, et cela a l'inconvénient que vous devez toujours écrire 'foobar.image.xy()'. – WolfgangA

0

Je crée généralement une structure pour maintenir le QImage et le chemin de l'image.

struct Image 
{ 
    QImage imageData; 
    QString filename; 
};