Pergunta

É possível mapear um arquivo de recurso em Qt?

Por exemplo:

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

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

Quando eu tento isso, ptr == 0 , indicando um erro.
Ele funciona muito bem se eu tentar mapear um arquivo regular.

Estou executando o Qt no Linux, que suporta QFile::Map.

Foi útil?

Solução

Sim, é possível. Há uma coisa para manter em mente. Por padrão, o recurso qt compilador RCC compressas dos recursos.

A chamada file.size () irá retornar o tamanho real, comprimido-un do arquivo original. No entanto, o recurso incorporado é comprimido e é mais provável um tamanho diferente. O file.map (0, file.size ()) devolve um erro, uma vez que o tamanho passado para mapear () é maior do que o recurso a ser mapeada. Mesmo se você passar o tamanho correto para mapear (), ou um tamanho menor, a memória irá conter os dados compactados, não os dados comprimido-un.

A solução é não comprimir o recurso incorporado. Isso pode ser feito através da adição de:

QMAKE_RESOURCE_FLAGS += -no-compress  

para o arquivo de projeto qt. Consulte aqui para explicação do QMAKE_RESOURCE_FLAGS.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top