如何在Qt中映射资源文件?
是否可以在 Qt 中映射资源文件?
例如:
QFile file(resource_name);
file.open(QIODevice::ReadOnly);
uchar* ptr = file.map(0, file.size());
当我尝试这样做时,ptr == 0,表示错误。
如果我尝试映射常规文件,它工作得很好。
我在 Linux 上运行 Qt,它支持 QFile::Map
。
Is it possible to map a resource file in Qt?
For example:
QFile file(resource_name);
file.open(QIODevice::ReadOnly);
uchar* ptr = file.map(0, file.size());
When I try this, ptr == 0, indicating an error.
It works fine if I try to map a regular file.
I am running Qt on linux, which supports QFile::Map
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对的,这是可能的。 但有一点需要记住。 默认情况下,qt 资源编译器 rcc 压缩资源。
file.size() 调用将返回原始文件的实际未压缩大小。 然而,嵌入资源被压缩并且很可能具有不同的大小。 file.map(0, file.size()) 返回错误,因为传递给 map() 的大小大于正在映射的资源。 即使您将正确的大小传递给map(),或更小的大小,内存也将包含压缩数据,而不是未压缩数据。
解决方案是不压缩嵌入资源。 完成
这可以通过添加:到您的 qt 项目文件来 。 请参阅此处了解 QMAKE_RESOURCE_FLAGS 的说明。
Yes, it is possible. There is one thing to keep in mind though. By default the qt resource compiler rcc compresses the resources.
The file.size() call will return the actual, un-compressed size of the original file. However, the embedded resource is compressed and is most likely a different size. The file.map(0, file.size()) returns an error since the size passed to map() is larger than the resource being mapped. Even if you pass the correct size to map(), or a smaller size, the memory will contain the compressed data, not the un-compressed data.
The solution is to not compress the embedded resource. This can be accomplished by adding:
to your qt project file. See here for explanation of QMAKE_RESOURCE_FLAGS.