Frage

Ist es möglich, eine Ressource-Datei in Qt abzubilden?

Zum Beispiel:

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

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

Wenn ich versuche, dies, ptr == 0 , einen Fehler anzeigt.
Es funktioniert gut, wenn ich versuche, eine reguläre Datei abzubilden.

Ich bin mit Qt auf Linux, die QFile::Map unterstützt.

War es hilfreich?

Lösung

Ja, es ist möglich. Es ist eine Sache, wenn im Auge zu behalten. Standardmäßig wird die qt Ressource-Compiler rcc komprimiert die Ressourcen.

Die file.size () Aufruf wird die tatsächliche, un-komprimierte Größe der Originaldatei zurück. Allerdings ist die eingebettete Ressource komprimiert und ist höchstwahrscheinlich eine andere Größe. Die file.map (0, file.size ()) einen Fehler zurückgibt, da die Größe zu kartieren () übergeben ist, größer ist als die Ressource zugeordnet werden. Auch wenn Sie die richtige Größe zur Karte () oder eine kleinere Größe übergeben, wird der Speicher die komprimierten Daten enthält, nicht auf die un-komprimierten Daten.

Die Lösung ist nicht die eingebettete Ressource zu komprimieren. Dies kann durch Zugabe erreicht werden:

QMAKE_RESOURCE_FLAGS += -no-compress  

auf Ihre qt Projektdatei. Siehe hier zur Erläuterung QMAKE_RESOURCE_FLAGS.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top