QT에서 리소스 파일을 매핑하는 방법은 무엇입니까?
-
05-07-2019 - |
문제
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의 설명.
제휴하지 않습니다 StackOverflow