Pregunta

¿Es posible asignar un archivo de recursos en Qt?

Por ejemplo:

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

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

Cuando intento esto, ptr == 0 , lo que indica un error.
Funciona bien si intento asignar un archivo regular.

Estoy ejecutando Qt en Linux, que admite QFile :: Map .

¿Fue útil?

Solución

Sí, es posible. Sin embargo, hay una cosa que tener en cuenta. De forma predeterminada, el compilador de recursos qt rcc comprime los recursos.

La llamada a file.size () devolverá el tamaño real, sin comprimir, del archivo original. Sin embargo, el recurso incrustado está comprimido y es muy probable que tenga un tamaño diferente. File.map (0, file.size ()) devuelve un error ya que el tamaño pasado a map () es mayor que el recurso que se asigna. Incluso si pasa el tamaño correcto para mapear (), o un tamaño más pequeño, la memoria contendrá los datos comprimidos, no los datos no comprimidos.

La solución es no comprimir el recurso incorporado. Esto se puede lograr agregando:

QMAKE_RESOURCE_FLAGS += -no-compress  

a su archivo de proyecto qt. Consulte aquí para obtener una explicación de QMAKE_RESOURCE_FLAGS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top