【问题标题】:Get the container file for an embedded resource in Qt C++在 Qt C++ 中获取嵌入式资源的容器文件
【发布时间】:2017-11-08 00:12:30
【问题描述】:

这里显示how to get list of files stored in a .qrc Qt Resorce file?

此解决方案按预期工作,但是列表不显示给定条目的来源 .qrc 文件,例如项目包含多个库形式的子项目,每个子项目都有自己的 .qrc文件。

那么,问题是:有没有办法知道获取列表中的给定资源属于哪个.qrc文件?

我需要这些信息来让库知道哪些资源可从其本地 .qrc 中获得,而不是获取应用程序全局可用的所有资源。

平台信息:在 Windows 7 上安装了 MSVC2013 的 Qt 5.6.1

【问题讨论】:

    标签: c++ windows qt embedded-resource


    【解决方案1】:

    不,你不能。当qrc 文件编译时,原始文件名不会并入编译后的二进制文件中。如果您希望库知道其本地资源,您应该将prefix 添加到每个带有库标识符的资源文件中。更多解释见Qt Resource System。例如

    <!-- resource for mylib01 -->
    <!DOCTYPE RCC><RCC version="1.0">
    <qresource prefix="mylib01">
        <file>images/copy.png</file>
        <file>images/cut.png</file>
    </qresource>
    </RCC>
    
    
    <!-- resource for mylib02 -->
    <!DOCTYPE RCC><RCC version="1.0">
    <qresource prefix="mylib02">
        <file>images/copy.png</file>
        <file>images/cut.png</file>
        <file>images/new.png</file>
    </qresource>
    </RCC>
    

    然后每个资源文件将以:/mylib01/copy.png:/mylib02/copy.png、...当列出特定库的资源中的文件时,只需将库标识符与资源文件名进行比较,以检查它是否属于图书馆与否。

    另一种选择是使用单独的二进制资源,然后使用QResource 动态加载它。可以通过QResource::fileName()访问编译后的资源文件名。

    【讨论】:

    • 嗯,添加前缀通常是解决方案,但在这种特殊情况下,由于库可以相互独立开发并且可能最终使用相同的前缀,因此重要的是要知道哪个文件由哪个库提供。无论如何,正如你所说,没有办法获得这样的信息,我可能应该重新考虑我的应用程序的设计,以克服了解这一点的需要。至于动态加载的资源 - 我还没有这样做,所以我会尝试一下,看看它是如何工作的。谢谢你的回答,普图!
    猜你喜欢
    • 2017-11-18
    • 2011-09-21
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2013-12-08
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多