문제

QT에서 리소스 파일을 매핑 할 수 있습니까?

예를 들어:

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

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

내가 이것을 시도 할 때 ptr == 0, 오류를 나타냅니다.
일반 파일을 매핑하려고하면 잘 작동합니다.

지원하는 Linux에서 QT를 실행하고 있습니다 QFile::Map.

도움이 되었습니까?

해결책

예, 가능합니다. 그래도 명심해야 할 것이 하나 있습니다. 기본적으로 QT 리소스 컴파일러 RCC 자원을 압축합니다.

file.size () 호출은 원본 파일의 실제 비 압축 크기를 반환합니다. 그러나 임베디드 리소스는 압축되어 크기가 다릅니다. file.map (0, file.size ())는 Map ()에 전달 된 크기가 맵핑되는 자원보다 크기 때문에 오류를 반환합니다. 올바른 크기를 Map ()로 전달하거나 더 작은 크기를 전달하더라도 메모리에는 압축되지 않은 데이터가 아닌 압축 데이터가 포함됩니다.

해결책은 임베디드 리소스를 압축하지 않는 것입니다. 이것은 다음을 추가하여 달성 할 수 있습니다.

QMAKE_RESOURCE_FLAGS += -no-compress  

QT 프로젝트 파일에. 보다 여기 qmake_resource_flags의 설명.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top