Windows下Qt5程序打包發布


Windows下Qt5程序打包發布與圖標設置

原文(有刪改):https://blog.csdn.net/qq_39105333/article/details/114779650

設置程序圖標

默認的程序是沒有圖標的,丑丑的。

設置桌面圖標

0、選擇一個你喜歡的ico圖片文件,放在源碼同級路徑

1、在程序的.pro文件中添加下列代碼:

RC_ICONS = app.ico //設置圖標 或  RC_FILE = app.rc 
#通過設置系統變量 VERSION 或 RC_ICONS (至少一個),qmake 會自動生成 .rc 文件。

# 指定圖標(等號右側是你的ico文件名稱)
RC_ICONS = let-me-know.ico
# 設置程序版本號,可省略
VERSION = 1.0.0.0

重新編譯運行程序,此后,我們就可以看到程序運行圖標和程序桌面圖標都變成了我們設置的ico圖標。

代碼中單獨設置程序運行圖標

如果希望程序圖標和桌面圖標不一樣的話,那么在項目源文件的構造函數內添加如下代碼:

#define SHOW_ICO ":/source/image/tray.jpg"
setWindowIcon(QIcon(SHOW_ICO));

重新編譯運行程序之后,程序的運行圖標就變成了我們設置的圖標,不過這種辦法無法對程序桌面圖標進行設置。

使用windeployqt 提取dll與打包exe

這里以:QT Creator為例。

0、設置項目以Release編譯生成:

比如生成了:helloQt.exe

1、找到項目的生成目錄,比如:

  • 項目源碼路徑:D:\let-me-know
  • 項目生成目錄是 D:\let-me-know\Release\

2、 進入生成路徑中,找到 helloQt.exe,將這個exe 復制到一個新的單獨的文件夾里用於發布

  • 比如:存到 D:\let-me-know-bin\ 文件夾里面,此時打開helloQt.exe會提示缺少dll之類的信息,程序打不開。

3、打開 “開始”菜單中打開Qt命令行工具,比如:Qt 5.12.5

4、輸入下列命令:

Setting up environment for Qt usage...
Remember to call vcvarsall.bat to complete environment setup!

# 切換到 D 盤
C:\Qt\Qt5.12.5\5.12.5\msvc2015_64>d:

# 進入` D:\let-me-know-bin\` 
D:\>cd D:\let-me-know-bin\

# 打包(常規程序)
D:\>windeployqt let-me-know.exe

# 打包(QML),
## 將`D:\Qt\Qt5.4.0\5.4\mingw491_32\qml`替換為你自己的Qt安裝目錄的qml文件夾路徑。
## 如果發布出現問題,將上述路徑改為你自己程序`.pro`文件所在路徑。
D:\>windeployqt let-me-know.exe --qmldir C:\Qt\Qt5.12.5\5.12.5\msvc2015_64\qml

之后會看到命令行進行了一系列操作,

D:\let-me-know-bin>windeployqt let-me-know.exe
D:\let-me-know-bin\let-me-know.exe 64 bit, release executable
Adding Qt5Svg for qsvgicon.dll
Direct dependencies: Qt5Core Qt5Gui Qt5Network Qt5Widgets
All dependencies   : Qt5Core Qt5Gui Qt5Network Qt5Widgets
To be deployed     : Qt5Core Qt5Gui Qt5Network Qt5Svg Qt5Widgets
Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not set.
Updating Qt5Core.dll.
Updating Qt5Gui.dll.
Updating Qt5Network.dll.
Updating Qt5Svg.dll.
Updating Qt5Widgets.dll.
Updating libGLESV2.dll.
Updating libEGL.dll.
Updating D3Dcompiler_47.dll.
Updating opengl32sw.dll.
Patching Qt5Core.dll...
Creating directory D:/bin1/bearer.
Updating qgenericbearer.dll.
Creating directory D:/bin1/iconengines.
Updating qsvgicon.dll.
Creating directory D:/bin1/imageformats.
Updating qgif.dll.
Updating qicns.dll.
Updating qico.dll.
// ...
Creating qt_pl.qm...
Creating qt_ru.qm...
Creating qt_sk.qm...
Creating qt_uk.qm...
Creating qt_zh_TW.qm...

隨后,D:\helloQt文件夾中會出現helloQt.exe運行所需文件,如果你的QT程序沒有依賴第三方庫,那么此時打開helloQt.exe程序就可以直接運行了。

基於Engima Virtual Box發布exe

Q:這個時候,我們的程序如果需要發布,必須將整個文件夾發出去,顯得有些繁重,有沒有解決方案呢?

A: 使用Engima Virtual Box將我們的這個文件夾壓縮為一個可執行文件。

下載

Engima Virtual Boxhttps://enigmaprotector.com/en/downloads.html

選擇:Enigma Virtual Box

Version 9.60 FREEWARE (versions history),Size 6.9 Mb

安裝,沒有特殊說明。

運行

指定要發布的exe

指定要打包的exe,就會默認指定輸出的exe

image-20210522165150363

添加依賴文件

就是庫等東西。

直接指定D:\let-me-know-bin\

點擊確定,選擇Add Folder %DEFAULT FOLDER%,效果如下:

當然,我們也可以選擇將文件和文件夾一起拖進來切記!一定要將可執行程序同目錄所有文件及文件夾加進來!

注:如果使用到了一些配置(例如ini),為了方便修改,這里建議不將對應的資源文件打包進去。

壓縮

為了減小程序體積,我們這里選擇壓縮,點擊右下角的Files Options

  • 勾選Compress Files
  • 點擊OK

image-20210522165650528

Process

最后,點擊窗口右下角的Process

片刻之后,就可以在我們的輸出路徑看到生成的EXE文件了,我們將新生成的EXE文件移動到其他沒有運行環境的文件夾中,打開,程序正常運行。

附錄:Qt windeployqt幫助說明

中文幫助

用法:windeployqt [options] [files]
Qt部署工具5.9.0

使用windeployqt最簡單的方法是添加Qt的bin目錄
安裝(例如<QT_DIR \ bin>)到PATH變量,然后運行:
  windeployqt <path-to-app-binary>
如果ICU,ANGLE等不在bin目錄中,則需要在PATH中
變量。如果您的應用程序使用Qt Quick,請運行:
  windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

選項:
  -  ?, -h,--help顯示此幫助。
  -v,--version顯示版本信息。
  --dir <目錄>使用目錄而不是二進制目錄。
  --libdir <path>將庫復制到路徑。
  --plugindir <path>將插件復制到路徑。
  --debug假設調試二進制文件。
  - 釋放假設釋放二進制文件。
  --pdb部署.pdb文件(MSVC)。
  - 強制更新文件。
  - 慢跑模擬模式。正常行為,但不要
                            復制/更新任何文件。
  --no-patchqt不要修補Qt5Core庫。
  --no-plugins跳過插件部署。
  --no-libraries跳過庫部署。
  --qmldir <directory>從目錄開始掃描QML-導入。
  --no-quick-import跳過Qt Quick導入的部署。
  --no-translations跳過翻譯的部署。
  --no-system-d3d-compiler跳過系統D3D編譯器的部署。
  --compiler-runtime部署編譯器運行時(僅限桌面)。
  --no-compiler-runtime不要部署編譯器運行時(僅限桌面)。
  --webkit2部署WebKit2(web進程)。
  --no-webkit2跳過WebKit2的部署。
  --json以JSON格式打印到stdout。
  - 角度的角度部署。
  - 無角度禁用ANGLE的部署。
  --no-opengl-sw不要部署軟件光柵化程序庫。
  --list <選項>只打印復制文件的名稱。
                            可用選項:
                             source:源文件的絕對路徑
                             目標:目標文件的絕對路徑
                             relative:相對目標文件的路徑
                                       到目標目錄
                             映射:輸出源和相對
                                       目標,適合在一個
                                       Appx映射文件
  --verbose <level>詳細級別。

可以通過傳遞它們的名稱(-xml)或通過傳遞來刪除Qt庫
該名稱由--no-(--no-xml)前綴。可用的庫:
藍牙並發核心聲明式設計器設計者組件
enginio gui qthelp多媒體multimediawidgets multimediaquick網絡nfc
opengl定位printsupport qml qmltooling快速quickparticles quickwidgets
腳本scripttools傳感器serialport sql svg測試webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput geoservices
webchannel texttospeech serialbus

參數:
  [files]包含二進制文件的二進制文件或目錄。

英文幫助

C:\Qt\Qt5.12.5\5.12.5\msvc2015_64>windeployqt --help
Usage: windeployqt [options] [files]
Qt Deploy Tool 5.12.5

The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:
  windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:
  windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

Options:
  -?, -h, --help            Displays this help.
  -v, --version             Displays version information.
  --dir <directory>         Use directory instead of binary directory.
  --libdir <path>           Copy libraries to path.
  --plugindir <path>        Copy plugins to path.
  --debug                   Assume debug binaries.
  --release                 Assume release binaries.
  --pdb                     Deploy .pdb files (MSVC).
  --force                   Force updating files.
  --dry-run                 Simulation mode. Behave normally, but do not
                            copy/update any files.
  --no-patchqt              Do not patch the Qt5Core library.
  --no-plugins              Skip plugin deployment.
  --no-libraries            Skip library deployment.
  --qmldir <directory>      Scan for QML-imports starting from directory.
  --no-quick-import         Skip deployment of Qt Quick imports.
  --no-translations         Skip deployment of translations.
  --no-system-d3d-compiler  Skip deployment of the system D3D compiler.
  --compiler-runtime        Deploy compiler runtime (Desktop only).
  --no-compiler-runtime     Do not deploy compiler runtime (Desktop only).
  --webkit2                 Deployment of WebKit2 (web process).
  --no-webkit2              Skip deployment of WebKit2.
  --json                    Print to stdout in JSON format.
  --angle                   Force deployment of ANGLE.
  --no-angle                Disable deployment of ANGLE.
  --no-opengl-sw            Do not deploy the software rasterizer library.
  --list <option>           Print only the names of the files copied.
                            Available options:
                             source:   absolute path of the source files
                             target:   absolute path of the target files
                             relative: paths of the target files, relative
                                       to the target directory
                             mapping:  outputs the source and the relative
                                       target, suitable for use within an
                                       Appx mapping file
  --verbose <level>         Verbose level (0-2).

Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth concurrent core declarative designer designercomponents enginio
gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc
opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets
script scripttools sensors serialport sql svg test webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation
3dextras geoservices webchannel texttospeech serialbus webview

Arguments:
  [files]                   Binaries or directory containing the binary.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM