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

Posted

技术标签:

【中文标题】如何在 Qt 中映射资源文件?【英文标题】:How to map a resource file in Qt? 【发布时间】:2009-07-30 14:16:34 【问题描述】:

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

例如:

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

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

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

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

【问题讨论】:

【参考方案1】:

是的,这是可能的。不过要记住一件事。默认情况下,qt 资源编译器rcc 会压缩资源。

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

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

QMAKE_RESOURCE_FLAGS += -no-compress  

到您的 qt 项目文件。 QMAKE_RESOURCE_FLAGS 的解释见here。

【讨论】:

我认为这是值得鼓励的,只要它对其他人可能有用。它似乎也有一个徽章。见这里:***.com/questions/209329/…,这里:***.com/questions/2572/…,这里:***.com/questions/252194/…。

以上是关于如何在 Qt 中映射资源文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 资源中打包图片以便从静态 HTML 资源访问

Qt Creator 中没有资源文件

如何从 Qt 中的资源文件中重复/循环声音?

如何在Qt资源文件中包含exe等各种类型文件?

qt qrc 文件名称中文

如何添加Qt资源