Qt 资源系统中前缀相对于文件系统路径的优势是什么?

ymo*_*eau 2 c++ qt qt-resource

Qt的资源文件.qrc允许嵌入的文件分割成不同的前缀

<RCC>
    <qresource prefix="/qml">
        <file alias="CustomWidget.qml">qml/CustomWidget.qml</file>
    </qresource>
    <qresource prefix="/icons">
        <file alias="home.png">icons/home.png</file>
    </qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)

我经常看到开发人员使用前缀重做文件系统层次结构,如上例所示。但在我看来,它与调用者代码的观点完全相同:

<RCC>
    <qresource>
        <file>qml/CustomWidget.qml</file>
        <file>icons/home.png</file>
    </qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都可以在 C++ 中使用相同语法的文件:/qml/CustomWidget.qml

在文件系统路径上使用前缀+别名有什么好处吗?

p-a*_*l-o 5

这只是一种将资源 ID 与实际文件系统对象分离的方法。一旦定义了引用资源的前缀和别名,即使资源文件发生变化(即被另一个具有不同名称和路径的文件替换),代码也不会受到影响。

假设您有一个在许多应用程序之间共享的图像存储库,您可以像这样在qrc 中引用文件:

<RCC>
    <qresource prefix="/pics">
        <file alias="logo">../../../../pictures/logos/logo-001.png</file>
    </qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)

代码在长文件路径上几乎不可知,资源的引用方式如下:

QPixmap pix(":/pics/logo");
Run Code Online (Sandbox Code Playgroud)

如果需要不同的徽标,或者存储库已移动到不同的位置,则只需编辑qrc文件:

<RCC>
    <qresource prefix="/pics">
        <file alias="logo">../../../new-repo/logos/logo-002.png</file>
    </qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)