大型 Qt 外部二进制资源文件
Posted
技术标签:
【中文标题】大型 Qt 外部二进制资源文件【英文标题】:Large Qt external binary resource file 【发布时间】:2015-08-16 23:12:42 【问题描述】:我想使用 Qt 外部资源文件作为我的 android 应用程序的扩展文件。资源文件中要捆绑的资源总大小为 700+ MB。我经历过资源编译器 (rcc) 在我的计算机挂起和崩溃之前无法处理超过 500MB 的大小。我真的很想制作大文件,因为这样可以更轻松地为 Android 上传扩展文件。
我使用以下参数从命令行运行 rcc 工具:
rcc -binary -no-compression myQrcFile.qrc -o myOutputFile
我需要不使用压缩才能直接播放资源文件中捆绑的视频文件,但这不是问题。
我有两个问题,但第一个是主要问题:
-
有没有办法将总文件大小超过 500MB 的文件捆绑到一个文件中?
外部 Qt 资源文件的大小对应用程序的性能有影响吗?较大的文件 = 加载缓慢或类似情况?
【问题讨论】:
有趣的用例。是数据映射还是s-th?是否可以拆分数据? @ValentinHeinitz:数据是视频和图像。可以拆分数据,但是我必须将其压缩为一个文件并在目标(Android 设备)上解压缩。这增加了复杂性,如果可能,我想避免它。我个人认为 RCC 工具每个文件应该能够拥有超过 500 MB 的空间。 【参考方案1】:为了创建较小的资源数据,您可以尝试更改压缩(s,-compress)
为了加快加载速度,在 Qt 中嵌入资源似乎有两种可能性。
除非您明确指定将资源数据创建为外部库,否则资源数据将嵌入可执行文件中,并将在应用程序启动时加载(对应用程序图标、字体等有意义)
如果您使用 -binary 选项编译数据
rcc -binary myresource.qrc -o myresource.rcc
您将把数据构建到一个动态库中,您可以在应用程序启动之后加载该动态库
QResource::registerResource("/path/to/myresource.rcc");
这里有一个关于 SO 的类似问题,但它侧重于资源的动态加载,而不是大小:How can I embed a Qt resource into a .dll file?
这些链接应该会有所帮助:
http://doc.qt.io/qt-5/resources.html
http://doc.qt.io/qt-5/rcc.html
【讨论】:
压缩不是一个选项,因为如果资源文件被压缩,视频将无法正常播放。它也无济于事,因为压缩前的原始文件大小似乎是限制因素。我在问题标题中指定了 external 二进制资源文件,因为我没有将它添加到可执行文件中。我正在使用 QResource 类。本题存在的问题是资源编译器(rcc)工具不能在一个文件中打包超过500MB。 我同意。在某些情况下,压缩效果不好或没有帮助。【参考方案2】:我使用的是 32 位编译器 MinGW。我改用 MSVC 64 位编译器,可以创建大型外部资源文件。
【讨论】:
以上是关于大型 Qt 外部二进制资源文件的主要内容,如果未能解决你的问题,请参考以下文章