日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt中rcc工具简介

發布時間:2025/4/5 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt中rcc工具简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt 自帶的開發工具集里有專門的 rcc 工具,用于將 *.qrc 里面描述的圖片、文檔等編譯成對應的源代碼文件 qrc_*.cpp 或者獨立的二進制資源文件 *.rcc。下面介紹 rcc 工具的兩種用途:

(1)生成獨立的二進制資源文件 *.rcc
對于太大的圖片、音頻、視頻等文件,不適合集成到目標程序內部,可以放到操作系統文件路徑,或者單獨編譯成外掛資源 *.rcc 。舉例來說,myresource.qrc 包含了很多圖片和視頻,沒法編譯成目標程序內嵌資源時,可以打開 Qt 命令行,進入 myresource.qrc 所在的文件夾,執行命令:

rcc -binary myresource.qrc -o myresource.rcc

rcc 會把 myresource.qrc 里面描述的所有圖片、視頻等文件,都壓縮打包,生成一個二進制的 myresource.rcc 文件,這個 myresource.rcc 包含了所有的資源,這樣程序發布時就不需要帶一堆亂七八糟的碎文件了,一個 myresource.rcc 搞定。

那么代碼中如何使用 myresource.rcc 呢?需要在 main 函數開始的位置注冊這個獨立的二進制資源文件:

QResource::registerResource("/path/to/myresource.rcc");

然后也是使用之前類似的虛擬文件路徑,比如 ":/images/copy.png" 、":/images/cat.gif" 。
二進制資源文件 *.rcc 是用于外掛的,其實應用程序里面更常見的是內嵌資源,接下來介紹內嵌使用方式。

(2)應用程序內嵌資源
如果希望一個資源描述文件 application.qrc 在程序編譯時內嵌到目標程序里,需要在 *.pro 文件里加一句話:

RESOURCES += application.qrc

qmake 會自動根據這句話,為 application.qrc 添加編譯腳本,其編譯過程如下圖所示:

rcc 工具會解析 application.qrc 內的 XML 文本,找到需要添加的各種文件,默認情況下,rcc 工具會對這些文件做 ZIP 壓縮,然后將壓縮后的 ZIP 數據的每個字節轉換成比如 0x6f, 數值形式,所有文件壓縮后的數據對應一個 C++ 靜態數組 qt_resource_data[] ,并添加注冊、取消注冊、初始化、清除等函數和資源描述結構體,最終形成一個 qrc_application.cpp 文件。然后用編譯器編譯 qrc_application.cpp文件,得到 qrc_applicaotion.o ,鏈接到目標程序內部,就可以用 ":/images/copy.png" 等形式訪問程序內嵌資源了。

注意到剛才向 *.pro 文件里添加 qrc 資源描述文件使用的運算符是 +=? ,也就是說可以為應用程序添加多個 *.qrc 文件,如果涉及的圖片比較多,可以用多個 *.qrc 對圖片分類存放:

RESOURCES += buttons.qrc?
RESOURCES += backgrounds.qrc

使用多個 *.qrc 與使用一個 *.qrc 的方式是一樣的,虛擬文件路徑都類似 ":/buttons/ok.png" 、":/backgrounds/bgmain.png" 等,這里的 ok.png 放在項目文件夾的 buttons 子文件夾里,而 bgmain.png 是放在項目文件夾的 backgrounds 子文件夾里,因此兩個文件的路徑是不同的。

qmake 為內嵌資源添加的 rcc 編譯命令,類似下面這樣:

rcc -name application? application.qrc -o qrc_application.cpp

得到 qrc_application.cpp 源文件之后,剩下的編譯、鏈接就與普通 .cpp 文件一模一樣了。

qrc_application.cpp 文件中不僅有各種圖片、文檔對應的靜態數組,還有些結構體和函數,比如初始化和清除函數。
對于 rcc 命令,如果不加 -name application? 選項參數,那么在 qrc_application.cpp 里面生成的初始化和清除函數名為:

int QT_RCC_MANGLE_NAMESPACE(qInitResources)();
int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)();

如果加了 -name application? 選項參數,那么資源的初始化和清除函數名變為:

int QT_RCC_MANGLE_NAMESPACE(qInitResources_application)();
int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_application)();

QT_RCC_MANGLE_NAMESPACE() 這個宏其實沒什么用,僅用于提示作用。資源的初始化函數和清除函數會在資源加載和卸載時自動被調用。

應用程序的內嵌資源通常不需要手動初始化,但也有例外情況,比如在使用某些鏈接庫中的資源文件時,如果出現使用了正確的文件路徑 ":/images/copy.png" 卻找不到資源里圖片文件的情況,那么需要在使用該資源的類聲明里或者在 main 函數里打頭的位置加入一句手動初始化:

Q_INIT_RESOURCE(resources);

resources 是指 resources.qrc 的簡短名字形式,不需要擴展名。

總結

以上是生活随笔為你收集整理的Qt中rcc工具简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。