是否可以在 Qt 中映射资源文件?
例如:
QFile file(resource_name);
file.open(QIODevice::ReadOnly);
uchar* ptr = file.map(0, file.size());
当我尝试这个时,ptr == 0,表示错误。
如果我尝试映射常规文件,它工作正常。
我在 linux 上运行 Qt,它支持QFile::Map
.
是否可以在 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 的说明,请参见此处。