在QT资源系统中,前缀比文件系统路径的优势是什么?

What is the advantage of prefix over filesystem path in Qt resource system?

本文关键字:路径 是什么 文件系统 资源 QT 系统 前缀      更新时间:2023-10-16

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>

我经常看到开发人员用上面的示例重复使用前缀的文件系统层次结构。但我认为,对于呼叫者代码的观点,它与此相同:

<RCC>
    <qresource>
        <file>qml/CustomWidget.qml</file>
        <file>icons/home.png</file>
    </qresource>
</RCC>

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

使用

在文件系统路径上使用前缀 别名有任何优势吗?

这只是从实际文件系统对象中解除资源ID的一种方法。一旦定义了一个前缀和一个别名来引用资源,即使资源文件更改(即由其他名称和路径不同的文件替换(。

说您在许多应用程序中共享了图像的存储库,您可以在A qrc 中引用文件:

<RCC>
    <qresource prefix="/pics">
        <file alias="logo">../../../../pictures/logos/logo-001.png</file>
    </qresource>
</RCC>

代码在长文件路径上几乎是不可知论的,因此资源被引用了:

QPixmap pix(":/pics/logo");

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

<RCC>
    <qresource prefix="/pics">
        <file alias="logo">../../../new-repo/logos/logo-002.png</file>
    </qresource>
</RCC>

此行为将文件路径重新映射到逻辑空间路径上,这意味着即使您有一个驻留在不同路径中的文件,它们也可以组合一个逻辑文件。

这项技术反映了C 或Java中名称空间的相同概念。

例如:

您有以下文件,但它们不在同一文件夹中。

|---bar
   |---ca.cc
   |---da.cc
|---foo
   |---fa.cc
   |---ga.cc

为了方便起见,您需要使文件访问更加一致,并且不影响文件的位置更改。

然后,QT资源重新映射技术应实现,这将看起来像以下内容:

|---uniFolder
   |---ca.cc
   |---da.cc
   |---fa.cc
   |---ga.cc

注意:因为您已将所有文件都放入一个逻辑文件中(实际上是一个相同的名称空间(,所以文件的名称不应相同。