簡體   English   中英

Qt資源系統中的前綴優於文件系統路徑的優點是什么?

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

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與實際文件系統對象分離的一種方法。 一旦定義了引用資源的前綴和別名,即使資源文件發生更改(即被另一個具有不同名稱和路徑的文件替換),代碼也將保持不變。

假設您擁有許多應用程序之間共享的映像存儲庫,則可以像這樣在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

注意:因為您已將所有文件放入一個邏輯文件夾(實際上是同一名稱空間),所以文件名不應相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM