从零开始学Qt - 05:设置图标、打包发布以及精简体积的方法
當(dāng)我們用Qt Creator開發(fā)編譯完成一個程序后,通過點(diǎn)擊Qt Creator界面左下角的“運(yùn)行(Run)”按鈕,能夠正常運(yùn)行程序。但當(dāng)我們找到編譯輸出目錄,想要雙擊exe文件直接運(yùn)行程序時,會報(bào)丟失dll文件的系統(tǒng)錯誤[衰](如圖1)。這是由于程序運(yùn)行所需的各種動態(tài)庫還沒有被包含進(jìn)去。程序的打包發(fā)布就是將程序運(yùn)行所必需的動態(tài)庫添加完整的過程。
另外,在沒有專門設(shè)置圖標(biāo)前,剛開發(fā)的程序(如圖1中的例子samp1.exe)的圖標(biāo)是一個簡單的命令行圖標(biāo),顯得不是很專業(yè)[捂臉],在程序發(fā)布之前最好替換成你想要的圖標(biāo)。
圖1. 直接運(yùn)行的系統(tǒng)錯誤
在本篇文章中,我們首先給程序設(shè)置一個圖標(biāo)。編譯通過后,將程序運(yùn)行所需的文件打包,以便你能把程序分享給別人或在其他電腦上運(yùn)行。最后,打包后的文件體積有些大,我研究了一種能精簡體積的方法。
一、設(shè)置程序圖標(biāo)
設(shè)置圖標(biāo)的方法有多種,這里作為小白當(dāng)然選擇一種最簡單的方法[呲牙]。
首先準(zhǔn)備一個ico圖標(biāo)文件。我在電腦上隨便找了一個音樂形狀的圖標(biāo)文件,將其復(fù)制到項(xiàng)目源文件目錄中,并重命名為myico.ico,如圖2所示。
圖2. 準(zhǔn)備圖標(biāo)文件
在Qt Creator中打開項(xiàng)目文件,在“Edit”界面下,雙擊打開項(xiàng)目文件“samp1.pro”。在文件末尾,添加一行“RC_ICONS = myico.ico”(注意等號前后各有一個空格)。
圖3. 編輯項(xiàng)目文件添加圖標(biāo)
重新編譯程序并運(yùn)行。這時編譯輸出目錄中samp1.exe的圖標(biāo),以及程序運(yùn)行界面左上角的圖標(biāo),都已經(jīng)替換為我們想要的圖標(biāo)了,如圖4所示。
圖4. 添加圖標(biāo)后的結(jié)果
二、打包發(fā)布程序
為了打包發(fā)布程序,首先新建一個文件夾(這里我在Projects下新建了文件夾samp1_pack),然后將想要打包的samp1.exe文件復(fù)制到該文件夾中,如圖5所示。
圖5. 準(zhǔn)備打包目錄
由于我的程序是用MinGW 64bit編譯器編譯的,因此在開始菜單中找到對應(yīng)版本的Qt命令行工具(不能使用windows自帶的cmd),點(diǎn)擊運(yùn)行。在命令界面,首先切換當(dāng)前目錄到打包目錄(我的是D:\Qt\Projects\samp1_pack),然后運(yùn)行打包命令“windeployqt samp1.exe”。
圖6. 運(yùn)行打包命令
命令運(yùn)行完成后,在資源管理器中打開打包目錄,發(fā)現(xiàn)除了原來的samp1.exe外,多出了很多dll文件和子目錄(除了translations外其余目錄中也是dll)。這些多出的東西基本都是動態(tài)鏈接庫。對于一個幾乎什么也不干的程序,打包后的體積約66MB,確實(shí)是不小了[捂臉]。
圖7. 打包命令運(yùn)行的結(jié)果
三、精簡體積
Qt打包命令windeployqt比較全面的將動態(tài)庫包含進(jìn)來,但其實(shí)有些庫是不需要的。想要精簡打包文件夾的體積,必須要知道哪些文件是運(yùn)行所必須的。
在Windows系統(tǒng)中,可以通過一個免費(fèi)小軟件Dependency Walker分析一下動態(tài)庫的關(guān)聯(lián)性。官網(wǎng)地址為:http://www.dependencywalker.com/。
打開Dependency Walker軟件,點(diǎn)擊左上角的“打開”按鈕,找到我們打包的exe文件,然后點(diǎn)擊“打開”按鈕。注意這時不要進(jìn)行任何操作,軟件運(yùn)行較慢(一動就顯示未響應(yīng)[捂臉]),耐心等待結(jié)束即可。
圖8. 操作Dependency Walker軟件打開文件
在得到分析結(jié)果后(如圖9所示),我用紅框標(biāo)注出了在打包文件夾內(nèi)存在的dll文件,這些都是運(yùn)行必須的動態(tài)庫。
圖9. 動態(tài)庫依賴性分析結(jié)果
將除了上面找到的dll文件以外其他的文件和文件夾全部刪除,嘗試運(yùn)行程序,出現(xiàn)如圖10所示的運(yùn)行錯誤[衰]。注意到“Qt platform plugin”的提示,表明誤刪了Qt平臺插件。于是將“platforms”文件夾恢復(fù),之后程序終于能夠正常運(yùn)行了[摳鼻]。圖11是精簡之后最終保留的所有文件。
圖10. 缺失平臺插件錯誤
圖11. 精簡后的結(jié)果
精簡之后打包文件夾的大小約30MB,約為原來的一半左右。將文件夾壓縮(RAR,最好),大小為8.8M,已經(jīng)在可以接受的范圍了[捂臉]。
圖12. 精簡后的文件大小
總結(jié)一下,本文中我們主要學(xué)會了一種簡單的設(shè)置程序圖標(biāo)的方法和使用windeployqt打包程序的方法。Qt打包的程序有些體積過大,因此基于Dependency Walker軟件研究了精簡體積的方法。
限于小白我的水平有限(總感覺越來越難了[捂臉]),本文有任何不對之處或者有更好的方法,請大家多多關(guān)注評論[贊]。
—————往期目錄——————
從零開始學(xué)Qt - 03:探索Qt的安裝目錄結(jié)構(gòu)
從零開始學(xué)Qt - 02. 手把手教你下載和安裝Qt
從零開始學(xué)Qt - 01. 為什么學(xué)Qt
————————————————
總結(jié)
以上是生活随笔為你收集整理的从零开始学Qt - 05:设置图标、打包发布以及精简体积的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 胆固醇作用(一文了解胆固醇的四大作用)
- 下一篇: android raw 引用,Andro