Qt资源系统中文件系统路径的前缀有什么优势?
What is the advantage of prefix over filesystem path in Qt resource system?
Qt resource file .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 与实际文件系统对象分离的方法。一旦定义了引用资源的前缀和别名,即使资源文件发生变化(即被另一个具有不同名称和路径的文件替换),代码也不会受到影响。
假设您有一个在许多应用程序之间共享的图像存储库,您可以像这样在 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>
此行为将文件路径重新映射到逻辑-space-路径,这意味着即使您有很多文件位于不同的路径中,它们也可以组合-到一个逻辑文件夹中。
此技术反映了 C++ 或 Java 中名称的相同概念space。
例如:
您有以下文件,但它们不在同一个文件夹中。
|---bar
|---ca.cc
|---da.cc
|---foo
|---fa.cc
|---ga.cc
为了方便起见,您需要使文件访问更加一致并且不受文件位置变化的影响。
然后,qt资源重映射技术应该实现了,看起来像下面这样:
|---uniFolder
|---ca.cc
|---da.cc
|---fa.cc
|---ga.cc
注意:因为你把所有的文件都放在了一个逻辑文件夹中(实际上是同一个名字space),所以文件名不能一样。
Qt resource file .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 与实际文件系统对象分离的方法。一旦定义了引用资源的前缀和别名,即使资源文件发生变化(即被另一个具有不同名称和路径的文件替换),代码也不会受到影响。
假设您有一个在许多应用程序之间共享的图像存储库,您可以像这样在 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>
此行为将文件路径重新映射到逻辑-space-路径,这意味着即使您有很多文件位于不同的路径中,它们也可以组合-到一个逻辑文件夹中。
此技术反映了 C++ 或 Java 中名称的相同概念space。
例如:
您有以下文件,但它们不在同一个文件夹中。
|---bar
|---ca.cc
|---da.cc
|---foo
|---fa.cc
|---ga.cc
为了方便起见,您需要使文件访问更加一致并且不受文件位置变化的影响。
然后,qt资源重映射技术应该实现了,看起来像下面这样:
|---uniFolder
|---ca.cc
|---da.cc
|---fa.cc
|---ga.cc
注意:因为你把所有的文件都放在了一个逻辑文件夹中(实际上是同一个名字space),所以文件名不能一样。