首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Qt资源系统中,前缀比文件系统路径有什么优势?

在Qt资源系统中,前缀比文件系统路径有什么优势?
EN

Stack Overflow用户
提问于 2018-02-27 15:44:56
回答 2查看 1.7K关注 0票数 2

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

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
<RCC>
    <qresource>
        <file>qml/CustomWidget.qml</file>
        <file>icons/home.png</file>
    </qresource>
</RCC>

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

在文件系统路径上使用prefix+alias有什么好处吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-27 15:57:47

它只是一种将资源id与实际文件系统对象分离的方法。一旦定义了引用资源的前缀和别名,即使资源文件发生更改(即由另一个具有不同名称和路径的文件替代),代码也将保持不变。

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

代码语言:javascript
复制
<RCC>
    <qresource prefix="/pics">
        <file alias="logo">../../../../pictures/logos/logo-001.png</file>
    </qresource>
</RCC>

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

代码语言:javascript
复制
QPixmap pix(":/pics/logo");

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

代码语言:javascript
复制
<RCC>
    <qresource prefix="/pics">
        <file alias="logo">../../../new-repo/logos/logo-002.png</file>
    </qresource>
</RCC>
票数 6
EN

Stack Overflow用户

发布于 2019-02-25 09:12:06

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

这种技术在C++或Java中反映了相同的命名空间概念。

例如:

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

代码语言:javascript
复制
|---bar
   |---ca.cc
   |---da.cc
|---foo
   |---fa.cc
   |---ga.cc

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

然后,应该实现qt资源重新映射技术,如下所示:

代码语言:javascript
复制
|---uniFolder
   |---ca.cc
   |---da.cc
   |---fa.cc
   |---ga.cc

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49012614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档