Qt程序打包之QtIFW使用教程


QtIFW 簡(jiǎn)介

Qt IFW(Qt Installer Framework 的簡(jiǎn)稱(chēng) ),是由 Qt 官方提供的安裝程序制作框架抓谴。進(jìn)入Qt IFW的官方下載頁(yè)钧椰,選擇一個(gè)合適版本蛛壳,這里選擇版本號(hào)為4.5.0的windows版本進(jìn)行安裝杏瞻。

官方下載地址:https://download.qt.io/official_releases/qt-installer-framework/

本文會(huì)在Windows上基于Qt IFW進(jìn)行程序安裝包程序制作,包括常用的離線安裝包和在線更新包的生成和驗(yàn)證都會(huì)詳細(xì)介紹衙荐。使用Qt IFW制作安裝包默認(rèn)您已經(jīng)準(zhǔn)備好了完整的程序包(windeployqt或者其它工具生成)捞挥。

環(huán)境配置

添加到Qt Creator幫助文檔

打開(kāi) Qt Creator,選擇【工具】–>【選項(xiàng)】–>【幫助】–>【文檔】–>【添加】
選擇Qt IFW安裝目錄doc下的ifw.qch文件忧吟。

4.5.0安裝目錄下沒(méi)有qch文件树肃,此步驟可以跳過(guò)。

配置Windows環(huán)境變量

Windows下使用binarycreator作為打包工具瀑罗,必須把binarycreator工具所在的bin目錄導(dǎo)入的環(huán)境變量Path中胸嘴。

Qt IFW的使用

構(gòu)建Example

直接Qt構(gòu)建examples.pro可查看各個(gè)例子安裝效果

制作安裝包至少應(yīng)包含config/雏掠、packages/兩個(gè)目錄

離線安裝

創(chuàng)建配置文件

<?xml?version="1.0"?encoding="UTF-8"?>
<Installer>
	<Name>UDS_Updata</Name>
	<Version>1.0.0</Version>
	<Title>UDS_Updata?Installer</Title>
	<Publisher>nealwang</Publisher>
	<StartMenuDir>UDS_Updata</StartMenuDir>
	<TargetDir>@ApplicationsDir@/UDS_Updata</TargetDir>
</Installer>

配置文件指定如下信息:

  • < Title > 標(biāo)題欄上安裝程序名稱(chēng)

  • < Name > 顯示在安裝頁(yè)面上應(yīng)用程序的名稱(chēng)

  • < Version > 應(yīng)用程序的版本號(hào)

  • < Publisher > 軟件發(fā)布者

  • < StartMenuDir > 添加到開(kāi)始菜單默認(rèn)程序組名稱(chēng)

  • < TargetDir > 應(yīng)用程序的安裝目錄

創(chuàng)建包信息文件

<?xml?version="1.0"?encoding="UTF-8"?>
<Package>
	<DisplayName>UDS_Updata</DisplayName>
	<Description>This?is?a?demo?for?Qt?IFW?</Description>
	<Version>1.0.0-1</Version>
	<ReleaseDate>2023-10-19</ReleaseDate>
	<Default>true</Default>
	<Script>installscript.qs</Script>
	<Licenses>
		<License?name="Public?License?Agreement"?file="license.txt"?/>
	</Licenses>
</Package>

各個(gè)元素含義如下:

  • < DisplayName > 指定組件的名稱(chēng)

  • < Description > 顯示選中組件的描述信息

  • < Version > 組件的版本號(hào)信息,可用作后期版本更新

  • < ReleaseDate > 組件發(fā)布的日期

  • < Default > 安裝過(guò)程中組件是否默認(rèn)選中劣像,true表示默認(rèn)選中乡话,false默認(rèn)補(bǔ)選中。

  • < Script > JavaScript文件名耳奕,執(zhí)行一些個(gè)性化的安裝操作

  • < Licenses > 添加許可文件

自定義安裝

通過(guò)在installscript.qs文件中添加如下內(nèi)容绑青,分別添加應(yīng)用程序到開(kāi)始菜單快捷方式和桌面快捷方式。

function?Component()
{
	gui.pageWidgetByObjectName("LicenseAgreementPage").entered.connect(changeLicenseLabels);
}
changeLicenseLabels?=?function()
{
	page?=?gui.pageWidgetByObjectName("LicenseAgreementPage");page.AcceptLicenseLabel.setText("Yes?I?do!");page.RejectLicenseLabel.setText("No?I?don't!");
}
Component.prototype.createOperations?=?function()
{
??//?調(diào)用默認(rèn)實(shí)現(xiàn)
??component.createOperations();
??if?(systemInfo.productType?===?"windows")?
??{
??	//?添加桌面快捷方式
??	component.addOperation("CreateShortcut","@TargetDir@/UDS_Updata.exe","@DesktopDir@/UDS_Updata.lnk","workingDirectory=@TargetDir@");
??	//添加開(kāi)始菜單快捷方式
??	component.addOperation("CreateShortcut","@TargetDir@/UDS_Updata.exe","@StartMenuDir@/UDS_Updata.lnk","workingDirectory=@TargetDir@");
??}
}

準(zhǔn)備打包文件

將提前準(zhǔn)備好的程序(*.exe屋群、*.dll等文件)

開(kāi)始打包

執(zhí)行如下命令

binarycreator?-c?config\config.xml?-p?packages?UDS_updateInstaller?-v


驗(yàn)證測(cè)試安裝包

雙擊生成安裝包一路next即可闸婴,部分截圖如下。

在線安裝

生成基礎(chǔ)安裝包

binarycreator --online-only -c config/config.xml -p packages installer.exe

創(chuàng)建初版存儲(chǔ)庫(kù)

repogen ?-p packages repository

安裝基礎(chǔ)安裝包

此過(guò)程若使用Gitee做存儲(chǔ)庫(kù)可能會(huì)出現(xiàn)異常芍躏,詳見(jiàn)異常問(wèn)題匯總

創(chuàng)建新版本存儲(chǔ)庫(kù)

repogen --update-new-components -p packages_update3.2 repository

使用安裝包中maintenancetool安裝更新

異常問(wèn)題匯總

異常1

使用Gitee做資源庫(kù)時(shí)較大文件無(wú)法下載邪乍,提示協(xié)議未知;

暫無(wú)解決辦法对竣,需切換成其它資源庫(kù)庇楞。

建議使用github存儲(chǔ)庫(kù)或者自建http服務(wù)。筆者使用python自帶的httpserver進(jìn)行測(cè)試否纬。

github需要修改hosts或者梯子吕晌,請(qǐng)自行選擇。

異常2

安裝目錄存在且包含安裝程序临燃,這就涉及到自動(dòng)卸載舊版本或者覆蓋安裝問(wèn)題睛驳。

總結(jié)

QtIFW比較靈活支持離線或在線安裝程序,或兩者兼而有之膜廊,具體取決于您的使用案例柏靶。支持資源庫(kù)、樣式表溃论、窗口等的定制化操作。

實(shí)操內(nèi)容已上傳Github,感興趣請(qǐng)移步痘昌,歡迎大佬批評(píng)指正钥勋。后續(xù)會(huì)持續(xù)更新完善

https://github.com/nealwang123/QtIFWOnline.git


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辆苔,隨后出現(xiàn)的幾起案子算灸,更是在濱河造成了極大的恐慌,老刑警劉巖驻啤,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菲驴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡骑冗,警方通過(guò)查閱死者的電腦和手機(jī)赊瞬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)先煎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人巧涧,你說(shuō)我怎么就攤上這事薯蝎。” “怎么了谤绳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵占锯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缩筛,道長(zhǎng)消略,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任瞎抛,我火速辦了婚禮艺演,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婿失。我一直安慰自己钞艇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布豪硅。 她就那樣靜靜地躺著哩照,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懒浮。 梳的紋絲不亂的頭發(fā)上飘弧,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音砚著,去河邊找鬼次伶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛稽穆,可吹牛的內(nèi)容都是我干的冠王。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舌镶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柱彻!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起餐胀,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哟楷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后否灾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卖擅,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惩阶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挎狸。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖琳猫,靈堂內(nèi)的尸體忽然破棺而出伟叛,到底是詐尸還是另有隱情,我是刑警寧澤脐嫂,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布统刮,位于F島的核電站,受9級(jí)特大地震影響账千,放射性物質(zhì)發(fā)生泄漏侥蒙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一匀奏、第九天 我趴在偏房一處隱蔽的房頂上張望鞭衩。 院中可真熱鬧,春花似錦娃善、人聲如沸论衍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坯台。三九已至,卻和暖如春瘫寝,著一層夾襖步出監(jiān)牢的瞬間蜒蕾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工焕阿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咪啡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓暮屡,卻偏偏與公主長(zhǎng)得像撤摸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褒纲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • qt程序打包發(fā)布 目標(biāo): 我想安裝自己開(kāi)發(fā)的程序 1.打包依賴(lài)庫(kù) a.使用qtcreator編譯生成程序demo....
    技術(shù)喵閱讀 817評(píng)論 0 1
  • QT5程序打包問(wèn)題 問(wèn)題描述:為了方便不同電腦之間QT程序的移植准夷,簡(jiǎn)單介紹QT5打包方式打包工具:QT5自帶的wi...
    三杯兩盞淡酒2323閱讀 703評(píng)論 0 1
  • 如題,近期因?yàn)轫?xiàng)目需求代承,得打包QT程序汁蝶,并將程序放到?jīng)]有安裝QT庫(kù)的電腦上運(yùn)行。網(wǎng)上索羅了下,打包QT程序的方式很...
    felixfeihu閱讀 1,962評(píng)論 0 0
  • 靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù) 靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別可以從以下幾個(gè)角度來(lái)說(shuō)明: 編譯方式:靜態(tài)庫(kù)在編譯時(shí)會(huì)被完整地鏈接到可執(zhí)行文件...
    高能程序員閱讀 147評(píng)論 0 0
  • ① 首先掖棉,自己也是閑來(lái)無(wú)趣剛剛開(kāi)始接觸Python這門(mén)語(yǔ)言墓律,收集了一些關(guān)于一些初級(jí)的學(xué)前準(zhǔn)備資料僅供大家參考 Py...
    biubiubiuCOWARD閱讀 23,369評(píng)論 3 30