2009-07-30 5 views
2

Est-il possible de mapper un fichier de ressources dans Qt?Comment 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 je tente cela, ptr == 0, ce qui indique une erreur.
Cela fonctionne très bien si j'essaie de mapper un fichier normal. Je cours Qt sur Linux, qui prend en charge QFile::Map.

Répondre

3

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() renvoie la taille non compressée réelle du fichier d'origine. Cependant, la ressource incorporée est compressée et a probablement une taille différente. Le fichier file.map (0, file.size()) renvoie une erreur car la taille passée à map() est plus grande que la ressource en cours de mappage. Même si vous passez la taille correcte à map(), ou une taille plus petite, 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. Cela peut être accompli en ajoutant:

QMAKE_RESOURCE_FLAGS += -no-compress 

à votre fichier de projet qt. Voir here pour l'explication de QMAKE_RESOURCE_FLAGS.

+0

Question et réponse en une minute ... – Matthieu

+0

Je pensais que cela a été encouragé tant que c'est quelque chose que d'autres pourraient trouver utile. Il semble qu'il y ait un badge pour ça aussi. Voir ici: http://stackoverflow.com/questions/209329/stackoverflow-should-i-answer-my-own-question-or-not, ici: http://stackoverflow.com/questions/2572/is-it -pauvre-étiquette-à-répondre-votre-propre-question et ici: http://stackoverflow.com/questions/252194/how-to-earn-the-self-learner-badge. –

Questions connexes