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

发布于 2024-07-29 21:07:45 字数 286 浏览 10 评论 0原文

是否可以在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一身仙ぐ女味 2024-08-05 21:07:46

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

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

解决方案是不压缩嵌入资源。 完成

QMAKE_RESOURCE_FLAGS += -no-compress  

这可以通过添加:到您的 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:

QMAKE_RESOURCE_FLAGS += -no-compress  

to your qt project file. See here for explanation of QMAKE_RESOURCE_FLAGS.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文