2009-07-30 106 views
2

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

例如:

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

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

当我尝试此,的ptr == 0,指示错误。
如果我尝试映射常规文件,它工作正常。

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

回答

3

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

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

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

QMAKE_RESOURCE_FLAGS += -no-compress 

到您的qt项目文件。有关QMAKE_RESOURCE_FLAGS的解释,请参阅here

+0

问题和答案在一分钟内... – Matthieu 2009-07-30 15:26:27