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