Qt中資源檔案的使用及意義

2021-09-27 12:34:35 字數 2097 閱讀 5964

乙個應用程式中可能需要載入各種資源(如圖示、文字翻譯等),對於這些資源的管理,qt有專門的資源管理系統,它是乙個跨平台的資源機制,用於將程式執行時需要的資源以二進位制的形式儲存到可執行檔案內部。因此如果將用到的資源,比如圖示檔案等,放在資源檔案中,它將編譯到可執行檔案內部,這樣就無需擔心這些檔案的丟失。資源系統基於 qmake、rcc和 qfile 之間的緊密合作。它廢棄了 qt 3的嵌入工具和 image collection 機制。

在記憶體中,以一棵資源物件樹來組織資源。此樹在程式啟動時被自動生成並且被 qfile 用來定位資源路徑。你可以使用帶有 ":/" 字首的 qdir 從根目錄開始遍歷這棵樹。

qt 資源系統支援搜尋路徑列表。如果你用 ":" 代替 ":/" 作為字首,則會使用搜尋路徑列表來搜尋資源。程式啟動時搜尋路徑列表為空,可以用 qdir::addsearchpath() 在其中增加路徑。

如果有資源位於靜態庫中,需要用不帶有字尾的 .qrc 檔名為引數呼叫 q_init_resource() 來強制初始化資源系統。例如:

int main(int argc, char *ar**) 

類似地,如果你需要顯式地解除安裝一系列資源(比如外掛程式被解除安裝或資源不再有效),你可以用同前的檔名為引數呼叫 q_cleanup_resource() ,來強制解除安裝資源。

資源檔案的字尾名為qrc,它用基於xml的檔案格式列出程式所需的檔案,其內容示例如下:

image/config-hovered.png

image/config-normal.png

image/config-pushed.png

load-hovered.png

load-normal.png

load-pushed.png

注意檔案中指明的路徑是相對於.qrc檔案所在目錄的相對路徑。而且這些檔案必須位於.qrc檔案所在的目錄或其子目錄。

資源檔案(qrc檔案)有兩種使用方式:

一種是通過qmake編譯嵌入到應用程式二進位制檔案中。此時,.qrc 檔案必須在 .pro 檔案中寫明以便於 qmake 可以正確處理。例如:

綜上,第一種方法是將資源檔案內嵌到應用程式中。這對於需要較少資源的程式來說是比較常用的。

rcc -binary myresource.qrc -o myresource.rcc

使用時,在程式中將rcc檔案登記到資源系統(使用qresource::registerresource()函式),實現資源的動態載入。

這兩種方式的區別是前者在程式執行中,所有的資源都會在記憶體中,這樣儘管讀取速度比較快,但也比較占用記憶體空間(對於只有幾個小的圖示檔案的程式來說就不是問題了),對於記憶體有限的裝置是個問題。而後者可以動態地將資源載入到記憶體(將資源登記到資源系統)或從記憶體中清除(通過unregisterresource()反註冊)。

預設情況下,程式可以直接使用 ":/" 字首加與**樹中相同的名字訪問資源。例如,:/images/my.png 可以訪問在程式**樹中位置為 images/my.png 的 my.png 檔案。用檔案標籤的別名屬性(alias)可以改變訪問名稱,如:

alias

="my.png">images/my.png

之後就可以在程式中使用 :/my.png 訪問此檔案了。

有些類似於翻譯檔案和圖示的資源可能需要隨著使用者的本地配置而改變,可以通過為 qresource 標籤指明 lang 屬性和適當的本地化字串來完成。例如:

如果使用者的本地配置是法語(也即 qlocale::system().name() 返回 "fr_fr" ),:/my.jpg 就變成了對 my_fr.jpg 檔案的引用。如果是別的本地配置,仍然使用 cut.jpg 。

使用本地化字串的格式的說明可以參考 qlocale文件。

JAR中資源檔案讀取

通過uri讀取檔案內容時。url url chinesematrix.class.getresource abc.dat file file new file url.touri 正常編譯時讀取沒問題。當程式打包jar讀取時系統提示 uri is not hierarchical 錯誤。無法讀取到檔...

關於Qt Creater中資源檔案和檔案路徑的記錄

想顯示一幅,建立了乙個資源檔案用來儲存路徑,使用qimage的load 方法載入 通過 png 引用 時,一直不能正常顯示,也看了好些帖子,有這麼幾種說法 a.在 在 qrc 即 qrc png 經測試,無效 b.看你的qt安裝目錄下是否有對應格式的dll檔案,我沒看到jpg png的dll檔案,以...

C 中資源檔案管理字串

大家知道mfc中有個資源檔案的東東,在c 中也有資源檔案,有了他管理各種資源。假如我們程式裡面用到一些字串,但是這些字串有可能在以後會改版,那麼就可以用資源檔案來管理,以後修改就更方便了。廢話少說,我覺得這種東西還是直接用和 更加容易懂一些。先新增新專案,選擇resource file,然後給檔案命...