概述
當我們用QT寫好了一個軟件,要把你的程序分享出去的時候,不可能把編譯的目錄拷貝給別人去運行。編譯好的程序應該是一個主程序,加一些資源文件,再加一些動態鏈接庫,高大上一些的還可以做一個安裝文件。
QT開發的程序發布的時候經常采用兩種方式:
- 靜態編譯:可生成單一的可執行文件
- 動態編譯:需同時附上需要的dll文件。
發布准備
設置程序圖標
-
主窗口圖標:主要在程序運行時顯示在主窗口左上角,或在任務欄上顯示。
-
運行程序圖標:一般在桌面或文件夾中顯示的縮略圖標,可以點擊后運行程序。
設置主窗口圖標
(1)首先在繪圖工具(例如Photoshop)中設計好圖標,圖標的分辨率最好大於3232。圖標需要用ico或*png的文件。如果想偷懶一點,直接去 https://www.iconfont.cn/ 下載,大量好看免費的圖標。
(2)將剛才的生成的圖標文件放到yourProjectFolder/Resources/images目錄下,或者任意一個程序可以找到的位置。最好將圖標文件添加到qrc中統一管理。
(3)然后再主窗口中使用,代碼如下,代碼很簡單,不過記住這句代碼一定要放到 **Mainwindow **的構造函數里去,不然不會work。
/*setwindowicon*/
setWindowIcon(QIcon(QStringLiteral(":/background/mainlogo"))); //括號寫你自己實際路徑就好
程序運行后的效果如下:
設置運行程序的圖標
如果你是使用qmake生成makefile文件或使用QT Creator IDE,那么按下面三步實施:
(1)創建一個包含圖標圖像的ICO文件,並將其保存在資源文件目錄下,例如命名為:myapp.ico;
(2)新建一個.rc 文件 新建文件–>C++–>source文件–>命名為 myapp.rc (不能掉了rc后綴)
打開rc文件添加如下一行代碼。
IDI_ICON1 ICON DISCARDABLE "myapp.ico"1
myapp.ico 是你的exe程序圖標名。
最后在pro文件添加一行代碼
RC_FILE += myapp.rc
保存項目重新編譯,exe圖標和執行時window圖標都將發生變化。
編譯release版本程序
注意將運行程序編譯方式設置成Release,因為debug版本的程序中包含了調試信息,可以用來調試。而真正要發布程序時,要使用release版本,這樣可以減少發布程序的體積同時增加軟件的安全。
上圖演示在Qt Creator中的設置方式,選中IDE左邊的側邊欄的項目,然后再構建設置中將構建配置設置為Release。
上圖演示在VS2015中的設置方式,選中IDE右邊的解決方案管理器中的項目,然后在IDE上邊的工具欄中將構建配置設置為Release。
發布程序
Qt官方開發環境默認使用動態鏈接庫方式,在發布生成的可執行程序時,我們需要復制一大堆動態庫,如果自己去復制動態庫,很可能丟三落四,導致程序在別的電腦里無法正常運行。 因此 Qt 官方開發環境里自帶了一個部署工具來幫助開發者自動拷貝大部分的依賴庫。在不同的平台使用方式也有所不同。
windows平台
Windows開發環境下 windeployqt 工具 (如果你已經將Qt的bin目錄加入PATH環境,那么你可以直接在命令行使用windeployqt調用.)。
(1)將項目中的release文件中的可執行文件拷到一個新建的文件夾中,例如project.exe,
(2)用Qt自帶的生成必備的dll文件的程序windeployqt,來把必要的動態庫拷到該文件夾中。
打開命令行,輸入
windeployqt project.exe
這時候大部分的dll文件都自動拷貝過來了,但是 如果項目還用了一些其他的SDK,比如OpenCV,Chartdir51等等,就需要手動將所需dll拷貝過來 ,如果不知道還需要哪些軟件,可以用Dependency Walker來查看缺少哪些dll文件。
拷貝完成后文件夾下的文件清單如下:
注意:如果發布的應用是Qt Quick Application應用,那么命令行需要加上QML的安裝目錄。命令中的D:\Qt\Qt5.5.1\qml是qml的安裝目錄,請換成你自己的qml安裝目錄!!!!!
windeployqt hello.exe--qmldir D:\Qt\Qt5.5.1\qml
linux平台
在X11平台下qt程序,首先准備好程序中需要使用的資源,庫和插件...,比如你的可運行程序取名叫作panel,那把你的panel,那些libQt.so.4和libQt.so.4.6.0(鏈接和共享庫都要)放在同一目錄下(也可以不同,只要小小修改下shell文件).plugins就不多說了。
在程序的同目錄下,新建一空文檔,取名panel.sh (文件名與程序名同名,擴展名為sh,shell文件)。在panel.sh中原封不動的寫入以下語句:
#!/bin/sh
appname=`basename $0 | sed s,/.sh$,,`
dirname=`dirname$0`
tmp="${dirname#?}"
if ["${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname$*
保存文件,退出。在終端給文件+x屬性: 切換到程序的目錄,輸入
chmod +x panel.sh
然后運行shell文件就行了(確保panel程序具備X屬性),它會自動更改環境變量,運行程序。
如果要調試shell文件,只需要在終端輸入:
sh -x panel.sh
這樣就 ok 了。
最后
現在你就可以把現在的文件夾壓縮成一個壓縮包,分享給你的朋友使用了!!