色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Qt資源系統,再也不用擔心按鈕圖標不見了

嵌入式小生 ? 來源:嵌入式小生 ? 2023-02-21 09:41 ? 次閱讀

一、資源系統

Qt的資源系統是一種獨立于平臺的機制,目的是用于在應用程序的可執行文件中存儲二進制文件。資源系統基于qmake、Qt的資源編譯器(rcc)和QFile實現。如果應用程序總是需要一組特定的文件(例如圖標、翻譯文件等),并且不想讓這些文件丟失而影響應用程序的功能,這時候則可以使用Qt資源系統解決這個問題。

二、外部二進制文件

Qt對于外部的二進制文件,如果需要使用這個二進制文件,那么則必須將所需要使用的二進制文件轉換成Qt的資源數據文件(默認文件名后綴為.rcc)。轉換步驟如下:

在Windows命令行下(這里以Windows系統為例),輸入以下命令:

82130b44-b184-11ed-bfe3-dac502259ad0.png

備注:這里windows命令行工作區目錄需要切換到.qrc文件所在的文件夾下,如上,筆者的工程項目的.qrc文件位于上述文件路徑。然后再輸入上述命令,便可使用rcc工具生成對應的資源文件。如下圖:

82378168-b184-11ed-bfe3-dac502259ad0.png

上圖所示目錄下的rc.rcc則是生成的資源文件。資源文件生成完成后,如何在應用程序中使用呢?

(1)在應用程序中使用registerResource()注冊資源,如下代碼:

#include"widget.h"

#include
#include
#include

intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);

//資源文件的路徑
QStringrccPath="C:/Users/iriczhao/Documents/untitled6/rc.rcc";

//注冊資源文件
if(!QResource::registerResource(rccPath))
{
qDebug()<<"rcc?register?failed!";
????}

????Widget?w;
????w.show();
????
????return?a.exec();
}

(2)默認情況下,在應用程序中,可以使用與資源樹中相同的文件名訪問資源,使用 :/ 前綴,或者使用qrc模式的URL訪問資源。例如,文件路徑:/images/top_bk.png或URL qrc:///images/top_bk.png將提供對top_bk.png文件的訪問,該文件在應用程序資源樹中的位置是images/top_bk.png。

如果不需要資源文件了,可以使用unregisterResource()卸載注冊的資源。

本小節描述的資源文件使用方法是:rcc+QResource。這種方式在發布應用軟件時需要連資源文件一起發布,并且需要保證資源的路徑與應用程序中設置的一致。除了這種方式,還可以將資源與應用程序編譯成二進制文件,后文會繼續寫到。

在內存中,資源由資源對象樹表示,該樹在啟動時自動構建,并由QFile解析資源的路徑。我們可以使用:/初始化的QDir從資源樹根開始地方進行資源導航和搜索。Qt的資源系統支持搜索路徑列表,如果使用:而不是:/作為前綴引用資源,則將使用搜索路徑列表查找該資源。搜索路徑列表在啟動時為空;需要調用QDir::addSearchPath()添加資源搜索路徑。

三、將資源與應用程序編譯成二進制文件

方法如下:

在工程文件.pro中,新增RESOURCES變量,如下:

RESOURCES=application.qrc

application.qrc為資源描述文件。還可以通過QtCreator的資源創建對話框添加。

這樣在應用程序構建中,資源文件將會與應用程序一起構建成統一的整體,如下圖所示:

824ede1c-b184-11ed-bfe3-dac502259ad0.jpg

通過這種方式,Qt總是將資源數據與應用程序編譯構建在一起。這樣就不必擔心丟失資源的問題,但是會為需要編譯的資源開設內存空間,對硬件資源嚴苛的環境并不友好。

四、使用庫中的資源

如果資源在庫中,若需要使用庫中資源,則需要調用Q_INIT_RESOURCE()強制初始化資源,將.qrc文件的資源名傳入到Q_INIT_RESOURCE()中。例如:

MyClass::MyClass():BaseClass(){
Q_INIT_RESOURCE(resources);//強制初始化資源

QFilefile(":/myfile.dat");
...
}

這種方式確保了在靜態鏈接的情況下,資源被鏈接到最終的應用程序二進制文件中。在實際開發中,應該將初始化代碼放在庫中使用資源的位置附近,這樣,如果基于庫的應用程序使用了依賴于它們的庫的特性,那么它們將只鏈接這些資源。

注意:由于rcc生成的資源初始化器是在全局名稱空間中聲明的,所以對Q_INIT_RESOURCE()的調用也需要在名稱空間之外進行。

如果庫包含的資源不是內部使用的,而是公開給庫的應用程序端,則需要在應用程序代碼中進行初始化。例如:

intmain(intargc,char*argv[]){
QApplicationapp(argc,argv);
Q_INIT_RESOURCE(graphlib);

QFilefile(":/graph.png");
...
returnapp.exec();
}

這可以確保在靜態鏈接的情況下將資源鏈接到最終的應用程序二進制文件中,但在動態鏈接的情況下(如插件)也會觸發庫加載。

同樣,如果必須顯式卸載一組資源,可以調用Q_CLEANUP_RESOURCE()來強制刪除資源,傳入的參數是.qrc資源文件名稱。

注意:當資源作為應用程序的一部分構建時,Q_INIT_RESOURCE()和Q_CLEANUP_RESOURCE()是不必要的。

五、資源壓縮

Qt資源壓縮是指:利用Qt的資源編譯器(rcc)對資源文件(.qrc)中提到的資源進行壓縮處理,以此方式優化最終二進制文件占用磁盤空間的情況 。默認情況下,它將執行自發式檢查,以確定壓縮是否值得,如果壓縮不夠,它將存儲未壓縮的內容。Qt資源文件的壓縮有如下特點:

(1)可以設置壓縮的壓縮閾值(threshold)。

(2)可以打開或關閉壓縮功能。

(3)可以設置壓縮等級。

(4)rcc支持以下壓縮算法和壓縮等級:

序號 壓縮方式 描述
1 zstd 使用Zstandard庫來壓縮內容。有效的壓縮級別范圍從1到19,1是最小的壓縮(耗費最少的CPU時間),19是最大的壓縮(耗費最多的CPU時間)。默認級別為14。特殊值0告訴zstd庫選擇一個實現定義的默認值。
2 zlib 使用zlib庫壓縮內容。有效的壓縮級別范圍從1到9,1是應用最少的壓縮(耗費最少的CPU時間),9是應用最多的壓縮(耗費最多的CPU時間)。特殊值0表示“不壓縮”,實際開發中不應使用。默認通常是級別6。
3 none 沒有壓縮。與-no-compress選項相同。

六、總結

總而言之,Qt框架對應用程序的資源有兩種使用、控制方式:

(1)第一種是直接將資源(如圖片、圖表)等與應用程序一起構建編譯,通過這種方式,資源數據將會與應用程序成為整體,不用擔心資源數據的丟失問題,但是對于內存資源嚴苛的環境并不友好。

(2)第二種是通過QResource類API動態的注冊和卸載資源數據文件(也稱為動態資源引入)。這樣在程序的運行中能動態的加載、引入資源數據,便于資源數據的管理和使用,同時也縮小了應用程序的內存占用空間。在Qt框架中,使用的外部資源文件(二進制)必須是.rcc文件。這種文件需要使用Qt資源編譯器(RCC)工具進行編譯、處理、生成,然后使用QResource類進行.rcc文件的注冊和卸載操作,動態的在應用程序運行過程中使用資源文件。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WINDOWS
    +關注

    關注

    3

    文章

    3541

    瀏覽量

    88626
  • 編譯器
    +關注

    關注

    1

    文章

    1623

    瀏覽量

    49108
  • Qt
    Qt
    +關注

    關注

    1

    文章

    302

    瀏覽量

    37899
  • 資源系統
    +關注

    關注

    0

    文章

    2

    瀏覽量

    5283
  • 命令行
    +關注

    關注

    0

    文章

    77

    瀏覽量

    10387

原文標題:Qt資源系統,再也不用擔心按鈕圖標不見了

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ST-Link驅動不見了怎么解決?

    用了很久的ST-Link驅動突然不見了,重新安裝設備管理器里面也沒有,電腦重啟也沒用,到底怎么了,應該怎么辦?[/tr]
    發表于 03-18 06:37

    顯示桌面不見了怎么辦?任務欄和xp顯示桌面圖標不見了?

    顯示桌面不見了怎么辦?任務欄顯示桌面不見了?工具欄顯示桌面不見了?xp顯示桌面不見了 ?顯示桌面圖標不見
    發表于 06-19 10:44

    AD09 PCB飛線不見了怎么辦?

    大家好,AD09 PCB飛線不見了怎么辦?
    發表于 03-27 14:04

    Win7筆記本任務欄中的電源圖標不見了怎么辦

    Win7任務欄中的電源圖標不見了怎么辦:很多時候我們需要將自己的筆記本電腦帶出門,因此電量就是我們最關注的問題了,因為不是每個地方都有電源的,但是最近有些用戶發現Windows7系統的任務欄通知區域
    發表于 05-21 16:20

    PSIM為什么背景變白,電路圖不見了

    之前畫好的電路圖,不知道點到哪了,電路圖就不見了,背景也變白了,但是運行還是正常的,這是怎么回事,怎么才能把電路圖顯示出來
    發表于 04-23 09:44

    pcb文件打開時貼片焊盤不見了

    本帖最后由 feifeigg5854 于 2015-6-25 19:23 編輯 pcb文件打開時貼片焊盤不見了,請各位大蝦看看是怎么回事!
    發表于 06-18 14:17

    PCB布線,網絡飛線不見了

    PCB布線時,網絡飛線不見了,但是只是其中一個網絡飛線不見,代之的是紅色X號方框,大家遇到過嗎?
    發表于 01-09 20:52

    Win10系統的回收站不見了的解決方法

    設置中點擊“桌面圖標設置”快捷鏈接。5、在打開的“桌面圖標設置”窗口中,發現回收站沒有選中,我們在這里選中“回收站”前的勾選,點擊確定按鈕。接下去的精彩內容請看:Win10系統的回收站
    發表于 01-27 16:20

    labview出報表excel橫線不見了

    labview出報表的時候,excel模板里面有橫線,但是一生成報表的時候,為什么線就不見了?見圖紅線部分,請問該怎么辦,謝謝
    發表于 08-10 15:52

    奇葩的問題,簇的邊框不見了

    奇葩的問題,簇的邊框不見了。 眾所周知,簇在面板顯示的時候,有個邊框,就是凹進去的那個,讓你知道那是個簇。最近看了07年的程序,竟然沒有邊框。??如下:上一個主題:https://bbs.elecfans.com/jishu_938887_1_1.html
    發表于 09-16 14:42

    生成exe時出錯,源程序不見了怎么解決?

    生成exe時出錯,源程序不見了怎么解決?打開以后就成現在這樣了,求大神指教
    發表于 01-17 18:42

    為什么我的原理圖編譯過來封裝不見了

    為什么我的原理圖編譯過來元器件我的線都還在怎么封裝不見了,感覺封裝沒錯啊
    發表于 06-05 03:03

    為什么AD17拼板后淚滴不見了

    AD17使用復制、特殊粘貼后拼板,淚滴不見了,哪位高手知道怎么處理,謝謝!發現AD18、AD19都有這個問題。AD09倒是不會。
    發表于 09-29 10:03

    垃圾箱刪除了不見了怎么辦

    垃圾箱刪除了不見了怎么辦 上回我的電腦不小心把垃圾箱給刪除了,死活不見了,現和大家分享一下我找回來的方法: 1 在空白的電腦桌面,按右
    發表于 12-23 14:46 ?1.7w次閱讀
    垃圾箱刪除了<b class='flag-5'>不見了</b>怎么辦

    快速啟動欄顯示桌面圖標不見了如何恢復

    很多電腦用戶在使用電腦時會出現桌面上的圖標不見了,有的是快快速啟動欄顯示桌面圖標不見了,不知道怎么找回來,這跟操作有很大的關系,下面介紹幾種常用的關于快速啟動欄顯
    發表于 10-16 11:06 ?3.2w次閱讀
    主站蜘蛛池模板: 免费精品一区二区三区在线观看| 9966在线观看免费高清电影| 双性被疯狂灌满精NP| 欧美做真爱欧免费看| 蜜桃视频一区二区| 老头狠狠挺进小莹体内视频| 久久精品国产在热亚洲完整版| 午夜精品久久久久久久99蜜桃| 青柠在线视频| 欧美白人战黑吊| 欧美精品久久久久性色AV苍井| 免费看b站| 嫩草伊人久久精品少妇AV网站| 美美哒免费影视8| 欧美18在线| 日本在线免费| 歪歪漫画羞羞漫画国产| 午夜免费福利片| 亚洲嫩草影院久久精品| 女仆翻身大作战| 噼里啪啦免费观看视频大全| 妻子的妹妹在线| 日日干夜夜爽| 午夜视频在线瓜伦| 亚洲精品无码不卡| 深夜释放自己污在线看| 午夜A级理论片左线播放| 亚洲国产精品嫩草影院久久| 花蝴蝶免费版高清版| 成 人 动漫3d 在线看| 动漫护士被乳羞羞漫| 国产精品久免费的黄网站| 国产曰批试看免费视频播放免费| 精品日产1区2卡三卡麻豆| 国产精品自在在线午夜精品| 超碰97人人做人人爱网站| 床伴在线观看免费高清完整泰剧第四集 | 成人免费看片45分钟| 国产精品久久久久久人妻精品流 | free18sex性自拍裸舞| 国产69精品久久久久APP下载|