¿Cómo asignar un archivo de recursos en Qt?
-
05-07-2019 - |
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
.
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.