Question

Est-il possible de mapper un fichier de ressources dans Qt?

Par exemple:

QFile file(resource_name);
file.open(QIODevice::ReadOnly);

uchar* ptr = file.map(0, file.size());

Lorsque j'essaie, ptr == 0 , ce qui indique une erreur.
Cela fonctionne bien si j'essaie de mapper un fichier normal.

J'utilise Qt sur Linux, qui prend en charge QFile :: Map .

Était-ce utile?

La solution

Oui, c'est possible. Cependant, il y a une chose à garder à l'esprit. Par défaut, le compilateur de ressources qt rcc compresse les ressources.

L'appel file.size () renverra la taille réelle, non compressée, du fichier d'origine. Toutefois, la ressource incorporée est compressée et a probablement une taille différente. File.map (0, file.size ()) renvoie une erreur car la taille transmise à map () est supérieure à la ressource en cours de mappage. Même si vous transmettez la taille correcte à map (), ou une taille inférieure, la mémoire contiendra les données compressées, pas les données non compressées.

La solution consiste à ne pas compresser la ressource incorporée. Ceci peut être accompli en ajoutant:

QMAKE_RESOURCE_FLAGS += -no-compress  

dans votre fichier de projet qt. Voir ici pour une explication de QMAKE_RESOURCE_FLAGS.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top