【QT】自動更新庫QSimpleUpdater使用實例封裝

【QT】自動更新庫QSimpleUpdater使用實例封裝

  • QSimpleUpdater 庫
    • 信號介紹
      • appcastDownloaded 信號
      • downloadFinished信號
      • 概括
    • 參數介紹
  • 實例編寫

QSimpleUpdater 庫

QSimpleUpdater是一個用于QT的開源自動更新庫,它可以幫助開發者實現應用程序的版本檢查和自動更新功能,官方的庫下載可以從QSimpleUpdater獲取,其中提供實例tutorial很推薦,可以通過tutorial.pro配置文件打開,直觀的看到對JSON文件下載的使用介紹;其中QSimpleUpdater.pri是庫的配置文件,可以導入進行庫的使用。

信號介紹

在使用過程中,會涉及到3個信號的使用,如下:
在這里插入圖片描述
其中appcastDownloadeddownloadFinished尤為要做好區分。

appcastDownloaded 信號

在庫文件中,對這個信號使用有如下注釋:
在這里插入圖片描述
翻譯過來就是:
如果customAppcast參數設置為true,則Updater不會嘗試從服務器讀取網絡回復,而是會發出appcastDownloaded()信號,該信號允許應用程序自行讀取和解釋appcast文件。
這里面關于customAppcast參數設置,會在博文后面提到。在這里,可以理解為:如果customAppcast設置了true,那么appcastDownloaded會觸發,此時可以在槽函數中對收到的原始數據進行自定義解析與使用;如果設置為false,則不會觸發。

downloadFinished信號

在庫文件中,對這個信號使用有如下注釋:
在這里插入圖片描述

翻譯過來就是:
QSimpleUpdater還實現了一個集成的下載器,如果需要使用自定義安裝過程/代碼,只需創建一個函數,當向以下對象發出downloadFinished()信號時,調用該函數實現自己的安裝過程。
這個解釋還是比較直觀的,可以理解為:需要自定義下載安裝過程,可以用downloadFinished信號,然后在槽函數中進行自定義過程。

概括

概括起來流程就是如下圖,appcastDownloaded 自定義傳遞的原始數據,downloadFinished自定義安裝的方式。其中appcastDownloaded 觸發必須要把customAppcast設置成true,而且如果自定義了原始數據,那么downloadFinished信號就不會在觸發了,當然不考慮在槽函數中手動觸發。等2個信號都處理完成后,然后就會觸發checkingFinished信號。
在這里插入圖片描述

參數介紹

關于參數介紹可以首先可以看官方提供的實例tutorial,結合里面的UI界面進行了解,其中標紅的6項剛好對應了6個參數的設置。
在這里插入圖片描述
對于它的具體說明,在如下的代碼注釋中進行了具體說明:

m_updater->setModuleVersion (url, qApp->applicationVersion());//當前版本號
m_updater->setNotifyOnFinish (url, false);//不顯示所有通知
m_updater->setNotifyOnUpdate (url, true);//有更新時通知我
m_updater->setDownloaderEnabled (url, true);//啟用集成的下載器
m_updater->setUseCustomAppcast (url, false);//不要使用QSU庫對傳遞的原始數據進行解析
m_updater->setMandatoryUpdate(url, false);//不強制更新

這里因為涉及到了qApp->applicationVersion()的使用,因此在項目pro配置文件中需要進行VERSION = 1.0.0.0配置。

實例編寫

在庫使用過程中,需要返回一個版本信息,實例tutorial中采用的url是"https://raw.githubusercontent.com/alex-spataru/QSimpleUpdater/master/tutorial/definitions/updates.json";,但由于是github容易訪問不到。因此,在實例編寫前,建議先寫一個服務端進行數據返回,返回格式可以參考updates.json的格式,如果只使用一個平臺,如windows,其實可以只寫windows一項。
在這里插入圖片描述
完成了服務端的設置,然后就可以進行實例的編寫,具體需求如下:設置按鈕,點擊可以進行文件下載與更新,更新時候自動關閉當前程序。明確了需求,首先進行庫的相關配置,由于測試需要,本博文中對三個信號都進行了信號處理,實際如果僅涉及到文件下載,其實只需要一個checkingFinished信號就行。

void MainWindow::on_pushButton_clicked()
{if(m_updater==nullptr){m_updater = QSimpleUpdater::getInstance();connect(m_updater,&QSimpleUpdater::checkingFinished,this,&MainWindow::checkingFinished);//對原始數據進行解析connect(m_updater,&QSimpleUpdater::appcastDownloaded, this,&MainWindow::displayAppcast);//自定義下載安裝connect(m_updater,&QSimpleUpdater::downloadFinished,this,&MainWindow::downloadFinished);m_updater->setModuleVersion (url, qApp->applicationVersion());m_updater->setNotifyOnFinish (url, false);//不顯示所有通知m_updater->setNotifyOnUpdate (url, true);//有更新時通知我m_updater->setDownloaderEnabled (url, true);//啟用集成的下載器m_updater->setUseCustomAppcast (url, false);//不要使用QSU庫對傳遞的原始數據進行解析m_updater->setMandatoryUpdate(url, false);//不強制更新}m_updater->checkForUpdates (url);
}

其次,涉及到自動關閉當前程序,雖然可以進行MandatoryUpdate強制更新的設置,但實際使用中會發現,操作較為繁瑣,還會觸發強制更新的提示。
在這里插入圖片描述

因此,可以不設置MandatoryUpdate強制更新,而是進行downloadFinished信號的處理,自定義關閉當前程序與下載文件流程。

void MainWindow::downloadFinished(const QString &url, const QString &filepath)
{qDebug()<<"-3-"<<filepath;QStringList d;d<<"/sp-"<<"/silent"<<"/norestart";//在不顯示用戶界面的情況下完成安裝,并且安裝結束后不重啟系統QProcess::startDetached(filepath,d);// 啟動外部程序并傳入參數exit(1); // 終止當前應用,返回錯誤碼1
}

完成了以上設計,就可以完成需求的實現,具體的客戶端Updater已經上傳。需要補充的是,關于QT生成的EXE程序,可以通過windeployqt 軟件名.exe的方式進行打包,但是這樣傳遞給他人使用還需要進行打包,較為繁瑣。因此,這邊推薦Inno Setup Compiler工具,可以用于創建Windows安裝程序,通過運行.iss配置文件完成文件的打包,最后輸出一個EXE安裝程序。運行這個EXE安裝程序,即可以完成打包軟件的本地部署。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86980.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nginx、CDN、 DNS的關系解析

文章目錄 Nginx 與 CDN 的關系1. 角色定位2. 協作方式3. 自建 CDN vs. 第三方 CDN Nginx 與 DNS 的關系1. 角色定位2. 協作方式3. 性能優化 CDN 與 DNS 的關系1. 角色定位2. 協作方式3. 高級 DNS 技術 三者結合的典型架構總結 Nginx、CDN 和 DNS 是現代網絡架構中的三個關鍵組件…

PH熱榜 | 2025-06-13

1. Flowstep 標語&#xff1a;借助人工智能&#xff0c;瞬間設計出美觀的用戶界面。 介紹&#xff1a;Flowstep 是您的 AI 設計助手&#xff0c;將簡單的文字提示轉化為用戶界面設計、線框圖和流程圖。它能加速您的工作流程&#xff0c;讓您輕松迭代&#xff0c;內置建議幫助…

Spectacular AI Gemini2 跑通實時建圖

參考鏈接&#xff1a;Spectacular AI 硬件設備 gemini2 測試了gemini335沒成功 修改record.cpp 倉庫鏈接&#xff1a;sdk 讀取Timu_cam ros2 run tf2_ros tf2_echo imu坐標系&#xff08;加速度計和陀螺儀都可以&#xff0c;兩者變換為單位陣&#xff09;camera_rgb_optic…

簡析MDM在餐飲設備中的部署與應用

引言&#xff1a;科技驅動餐飲運營升級 在競爭激烈的餐飲行業&#xff0c;科技已成為提升服務質量和運營效率的關鍵。從自助點餐機、數字菜單牌&#xff0c;到移動收銀系統&#xff0c;智能設備已經深入餐廳的日常運營。然而&#xff0c;隨著設備數量和種類的增加&#xff0c;…

RocketMQ總結

深入理解RocketMQ三高架構設計 高性能 順序寫磁盤 mmap 零拷貝異步刷盤 刷盤策略可配置輕量網絡協議 長連接復用 高可用 主從復制機制、controller、dledger集群NameServer 多副本無狀態客戶端自動切換 Broker消息刷盤機制保障可靠性 高可擴展性 Broker 水平擴展Consu…

vue3+tdesign實現明暗主題切換

很多項目中有些會涉及到明暗主題切換的功能&#xff0c;今天就來梳理一下有關這方面的具體實現步驟和使用到的方法&#xff0c;本篇文章使用到的組件是tdesign&#xff0c;利用部分案例&#xff0c;主要闡述明暗主題切換的技術原理和實現步驟&#xff0c;僅供參考。 目錄 一、…

goland 的 dug 設置

brew install delve # 或通過go install go install github.com/go-delve/delve/cmd/dlvlatestwhere dlvdlv.path/your/path/to/dlv環境變量 DEPLOY_MODEprivate;EGO_DEBUGtrue;EGO_MODEdev;MO_MODEdev;PD_MODEco;PRODUCT_MODEall

CVE-2020-1938源碼分析與漏洞復現(Tomcat 文件包含/讀取)

漏洞概述 漏洞名稱&#xff1a;Tomcat AJP協議文件包含/讀取漏洞&#xff08;Ghostcat&#xff09; CVE 編號&#xff1a;CVE-2020-1938 CVSS 評分&#xff1a;9.8 影響版本&#xff1a; Apache Tomcat 6.x (≤ 6.0.53)Apache Tomcat 7.x (≤ 7.0.99)Apache Tomcat 8.x (≤ 8…

基于51單片機的簡易打鈴系統

目錄 具體實現功能 設計介紹 資料內容 全部內容 資料獲取 具體實現功能 具體功能&#xff1a; &#xff08;1&#xff09;實時顯示當前時間&#xff08;時、分、秒&#xff09;&#xff0c;LED模式指示燈亮&#xff1b;4個按鍵可以調整時間的時和分。 &#xff08;2&…

vue+cesium示例:3D熱力圖(附源碼下載)

接到一位知識星友的邀請&#xff0c;隨機模擬三維數據點&#xff0c;結合heatmap.js實現基于cesiumvue的3D熱力圖需求&#xff0c;適合學習Cesium與前端框架結合開發3D可視化項目。 demo源碼運行環境以及配置 運行環境&#xff1a;依賴Node安裝環境&#xff0c;demo本地Node版本…

批處理實現:自動抓取perfetto日志 自動導出到當前文件夾 自動打開分析頁面

序言 最近在研究性能問題需要抓取trace文件。于是寫了個腳本 使用 雙擊運行批處理文件&#xff0c;可以開始記錄trace。而且以當前文件夾下面的。config.pbtx 作為配置文件。 &#xff08;pbtx就是一個json文件。配置了需要抓取那些參數&#xff0c;可以通過https://ui.per…

未來機器人的大腦:如何用神經網絡模擬器實現更智能的決策?

編輯&#xff1a;陳萍萍的公主一點人工一點智能 未來機器人的大腦&#xff1a;如何用神經網絡模擬器實現更智能的決策&#xff1f;RWM通過雙自回歸機制有效解決了復合誤差、部分可觀測性和隨機動力學等關鍵挑戰&#xff0c;在不依賴領域特定歸納偏見的條件下實現了卓越的預測準…

??Promise代碼理解

1.事件循環與 Promise 執行順序 案例 1&#xff1a;基礎 Promise 同步異步區分 console.log(1); new Promise(resolve > {console.log(2);resolve();console.log(3); }).then(() > console.log(4)); console.log(5); 輸出順序&#xff1a;1&#xff0c;2&#xff0c;3…

57、原生組件注入-【源碼分析】DispatcherServlet注入原理

57、原生組件注入DispatcherServlet注入原理 #### 繼承關系 - DispatcherServlet繼承自FrameworkServlet&#xff0c;而FrameworkServlet繼承自HttpServletBean&#xff0c;最終HttpServletBean繼承自HttpServlet。 - DispatcherServlet實現了ApplicationContextAware接口。 …

【動手學深度學習】3.5. 圖像分類數據集

目錄 3.5. 圖像分類數據集1&#xff09;讀取數據集2&#xff09;讀取小批量3&#xff09;整合所有組件4&#xff09;小結 . 3.5. 圖像分類數據集 我們將使用Fashion-MNIST數據集&#xff0c;作為圖像分類數據集。 %matplotlib inline import torch import torchvision from …

Python的格式化輸入輸出

# Python 的格式化輸出和格式化輸入## 格式化輸出Python 提供了多種字符串格式化的方法&#xff1a;### 1. % 格式化&#xff08;舊式格式化&#xff09;python name "Alice" age 25 print("Name: %s, Age: %d" % (name, age)) # 輸出: Name: Alice, Age…

day65—回溯—單詞搜索(LeetCode-79)

題目描述 給定一個 m x n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 單詞必須按照字母順序&#xff0c;通過相鄰的單元格內的字母構成&#xff0c;其中“相鄰”單元格是那些水平相…

iOS安全和逆向系列教程 第19篇:ARM64匯編語言基礎與逆向分析

引言 在成功掌握iOS應用脫殼技術后,我們獲得了可以進行靜態分析的二進制文件。然而,要真正理解iOS應用的底層邏輯,我們必須深入到匯編語言層面。ARM64(也稱為AArch64)是蘋果在iPhone 5s及以后設備中使用的指令集架構。本篇文章將深入探討ARM64匯編語言的基礎知識,并結合…

使用Gitlab CI/CD結合docker容器實現自動化部署

Gitlab CI/CD基本介紹 核心概念 持續集成&#xff08;CI&#xff09;&#xff1a;每次代碼提交后自動觸發構建、測試和代碼檢查&#xff0c;確保代碼質量 持續交付/部署&#xff08;CD&#xff09;&#xff1a;在 CI 基礎上自動將代碼部署到測試或生產環境&#xff0c;支持人工…

初學者運行Pycharm程序可能會出現的問題,及解決辦法

文章目錄 前言一、ModuleNotFoundError: No module named sklearn二、ImportError: cannot import name show_config from numpy (unknown location)三、Pycharm報錯&#xff1a;“Original error was: DLL load failed: 找不到指定的模塊“ 的解決辦法四、ImportError: cannot…