如何在Qt中映射资源文件?

时间:2009-07-30 14:16:35

标签: c++ qt qfile qt-resource

是否可以在Qt中映射资源文件?

例如:

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

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

当我尝试这个时, ptr == 0 ,表示错误 如果我尝试映射常规文件,它可以正常工作。

我在linux上运行Qt,它支持QFile::Map

1 个答案:

答案 0 :(得分:3)

是的,有可能。但有一点要记住。默认情况下,qt资源编译器rcc压缩资源。

file.size()调用将返回原始文件的实际未压缩大小。但是,嵌入的资源是压缩的,很可能是不同的大小。 file.map(0,file.size())返回错误,因为传递给map()的大小大于要映射的资源。即使您将正确的大小传递给map()或更小的大小,内存也将包含压缩数据,而不是未压缩的数据。

解决方案是不压缩嵌入的资源。这可以通过添加:

来实现
QMAKE_RESOURCE_FLAGS += -no-compress  

到你的qt项目文件。有关QMAKE_RESOURCE_FLAGS的说明,请参阅here