Domanda

È possibile mappare un file di risorse in Qt?

Ad esempio:

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

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

Quando provo questo, ptr == 0 , che indica un errore.
Funziona bene se provo a mappare un file normale.

Sto eseguendo Qt su Linux, che supporta QFile :: Map .

È stato utile?

Soluzione

Sì, è possibile. C'è una cosa da tenere a mente però. Per impostazione predefinita, il compilatore di risorse qt rcc comprime le risorse.

La chiamata a file.size () restituirà la dimensione effettiva, non compressa del file originale. Tuttavia, la risorsa incorporata è compressa ed è molto probabilmente di dimensioni diverse. File.map (0, file.size ()) restituisce un errore poiché la dimensione passata a map () è maggiore della risorsa mappata. Anche se si passa la dimensione corretta a map () o una dimensione inferiore, la memoria conterrà i dati compressi, non i dati non compressi.

La soluzione è non comprimere la risorsa incorporata. Ciò può essere ottenuto aggiungendo:

QMAKE_RESOURCE_FLAGS += -no-compress  

al tuo file di progetto qt. Vedi qui per la spiegazione di QMAKE_RESOURCE_FLAGS.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top