Qt 資源系統
轉自:http://blog.sina.com.cn/s/blog_98a4dde701013lcw.html
Qt 資源系統是一個將二進位制檔案存入可執行程式的平臺無關的機制。當你的程式經常需要這樣的一系列檔案(圖示、翻譯檔案等)並且不想冒丟失某些檔案的風險時非常有用。資源系統基於 qmake、rcc和 QFile 之間的緊密合作。它廢棄了 Qt 3的嵌入工具和 image collection 機制。
目錄[隱藏] |
資源集合檔案( .qrc )
程式相關的資源在一個 .qrc 檔案中指明,其基於XML的檔案格式列出磁碟上的檔案,並且可選擇地指明在程式中訪問對應的資源所使用的名稱。
下面是一個 .qrc 檔案的例子:
<!DOCTYPE RCC><RCC version="1.0"> <qresource> <file>images/copy.png</file><file>images/cut.png</file> <file>images/new.png</file> <file>images/open.png</file><file>images/paste.png</file> <file>images/save.png</file> </qresource> </RCC>
.qrc 檔案中列出的資原始檔是程式的程式碼樹的一部分。其中指明的路徑是對於 .qrc 檔案所在目錄的相對路徑。注:列出的資原始檔必須位於 .qrc 檔案所在目錄或其子目錄。
資源資料或者可以編譯成二進位制進而在程式程式碼中立即訪問,或者可以編譯成可以被建立的二進位制資源以便稍後在程式程式碼中登記到資源系統。
預設情況下,程式可以直接使用 ":/" 字首加與程式碼樹中相同的名字訪問資源。例如,:/images/cut.png 可以訪問在程式程式碼樹中位置為 images/cut.png 的 cut.png 檔案。用檔案標籤的別名屬性可以改變訪問名稱:
<file alias="cut-img.png">images/cut.png</file>
之後就可以在程式中使用 :/cut-img.png 訪問此檔案了。還可以使用 qresource 標籤的字首屬性為 .qrc 檔案中列出的所有檔案指明路徑字首:
<qresource prefix="/myresources"> <file alias="cut-img.png">images/cut.png</file></qresource>
於是可以用 :/myresources/cut-img.png 訪問該檔案了。
有些類似於翻譯檔案和圖示的資源可能需要隨著使用者的本地配置而改變,可以通過為 qresource 標籤指明 lang 屬性和適當的本地化字串來完成。例如:
<qresource> <file>cut.jpg</file> </qresource> <qresource lang="fr"> <filealias="cut.jpg">cut_fr.jpg</file> </qresource>
如果使用者的本地配置是法語(也即 QLocale::system().name() 返回 "fr_FR" ),:/cut.jpg 就變成了對 cut_fr.jpg 檔案的引用。如果是別的本地配置,仍然使用 cut.jpg 。
使用本地化字串的格式的說明可以參考 QLocale 文件。
外部二進位制資源
要建立外部二進位制資源,必須通過傳遞 -binary 開關給 rcc 來建立資源資料(通常使用 .rcc 副檔名),在建立之後就可以使用 QResource API 登記該資源。
例如, .qrc 檔案中指明的一系列資源資料可以用下面的方法編譯:
rcc -binary myresource.qrc -o myresource.rcc
在程式裡,需要用以下程式碼登記該資源:
QResource::registerResource("/path/to/myresource.rcc");
編譯嵌入資源
如果需要把資源編譯嵌入到二進位制檔案中, .qrc 檔案必須在 .pro 檔案中寫明以便於 qmake 可以正確處理。例如:
RESOURCES = application.qrc
qmake 會產生 make 規則來生成一個連結到程式中的名為 qrc_application.cpp 的檔案。這個檔案以靜態的 C++ 壓縮二進位制陣列包含了所有圖片和其他資源的資料。每當 qrc_application.cpp 本身或者是其中引用的資原始檔發生改變後,該檔案都會被自動重新生成。如果你不使用 .pro 檔案,那麼可以手工呼叫 rcc 或者在 build 系統中新增 build 規則。
當前,哪怕是在 Windows and Mac OS X 這些原生支援資源機制的作業系統中,Qt 也總是把資源資料儲存在可執行檔案中。在將來的 Qt 發行版本中可能會有所改變。
在程式中使用資源
在程式中,多數情況下可以使用資源路徑代替對應的正常的普通檔案路徑。特別地,可以用資源路徑取代檔名傳遞給 QIcon、 QImage ,或者 QPixmap 的建構函式:
cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);
關於在實際應用程式中使用 Qt 資源系統來儲存圖示,可以參考 Application 例子.
在記憶體中,以一顆資源物件樹來組織資源。此樹在程式啟動時被自動生成並且被 QFile 用來定位資源路徑。你可以使用帶有 ":/" 字首的 QDir 從根目錄開始遍歷這棵樹。
Qt 資源系統支援搜尋路徑列表。如果你用 ":" 代替 ":/" 作為字首,則會使用搜尋路徑列表來搜尋資源。程式啟動時搜尋路徑列表為空,可以用 QDir::addSearchPath() 在其中增加路徑。
如果有資源位於靜態庫中,需要用不帶有字尾的 .qrc 檔名為引數呼叫 Q_INIT_RESOURCE() 來強制初始化資源系統。例如:
int main(int argc, char *argv[]) { QApplication app(argc, argv);Q_INIT_RESOURCE(graphlib); ... return app.exec(); }
類似地,如果你需要顯式地解除安裝一系列資源(比如外掛被解除安裝或資源不再有效),你可以用同前的檔名為引數呼叫 Q_CLEANUP_RESOURCE() ,來強制解除安裝資源。
相關文章
- 共享資源庫系統
- 人力資源管理系統1.0
- Android系統“資源排程框架”Android框架
- 人力資源系統選型指南
- QT學習:給label新增圖片資源QT
- Cocos Creator 新資源管理系統剖析
- Qt_Demo_4:汽車管理系統QT
- Qt實現系統托盤訊息QT
- (持續更新)Qt3D 學習資源QT3D
- 如何正確挑選人力資源資訊系統?
- MySQL如何充分利用系統資源?MySql
- iOS系統資源排程機制解析iOS
- 麒麟系統開發筆記(二):國產麒麟系統搭建Qt開發環境安裝Qt5.12筆記QT開發環境
- Qt原始碼解析——元物件系統熱身QT原始碼物件
- 10_QT系統移植之在開發板上部署QT執行環境QT
- 淺談遊戲的經濟資源系統遊戲
- Linux 下檢視系統資源的更好方式Linux
- 人力資源管理系統和oa的區別?
- 必看,Linux系統及資源命令集錦!Linux
- 為k8s預留系統資源K8S
- Win10怎麼一鍵釋放系統資源 win10一鍵釋放系統資源的步驟Win10
- 09_QT系統移植之交叉編譯QT原始碼和觸控原始碼QT編譯原始碼
- Python 系統資源資訊獲取工具,你用過沒?Python
- 開源專案 Qt Esay Designer (Qt視窗設計器)QT
- 2024 開源資料工程生態系統全景圖
- 讀資料工程之道:設計和構建健壯的資料系統14源系統
- Centos系統配置yum源CentOS
- TPshop開源商城系統
- QT學習筆記(三)——QT中的座標系統及視窗位置,大小配置QT筆記
- Proxmox VE換系統源和CT模板源
- Docker系列09—Docker的系統資源限制及驗證Docker
- 人力資源管理系統中如何應用報表分析
- 大資料分析系統Hadoop的13個開源工具!大資料Hadoop開源工具
- 大資料分析系統Hadoop的13個開源工具大資料Hadoop開源工具
- 在Linux中,如何檢視系統資源使用情況?Linux
- 在Linux中,如何監控系統資源使用情況?Linux
- 分享5款佔用系統資源少的軟體
- 在Linux中,如何進行系統資源的監控?Linux
- 在Linux中,如何進行系統資源的隔離?Linux