Qt實現(xiàn)軟件自動更新_第1頁
Qt實現(xiàn)軟件自動更新_第2頁
Qt實現(xiàn)軟件自動更新_第3頁
Qt實現(xiàn)軟件自動更新_第4頁
Qt實現(xiàn)軟件自動更新_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、前言最近在學(xué)習(xí)Qt開發(fā)上位機,想實現(xiàn)一個檢查更新的功能,網(wǎng)上搜索了 一大圈,發(fā)現(xiàn)實現(xiàn)過程都很復(fù)雜,關(guān)鍵是代碼看不懂,所以就自己開發(fā)一種 簡單的方式來實現(xiàn)。實現(xiàn)效果如下:點擊“檢查更新”按鈕,如果當前版本低于遠程的版本,那么會彈出如下 窗口,提示更新,并顯示遠程的的版本號,更新時間,更新說明,如下圖所 示:玩的就是心撓By ncc VI.1|?2如果點擊去下載,那么會調(diào)用系統(tǒng)默認瀏覽器,直接創(chuàng)建下載任務(wù)。點 擊不更新,則取消更新。如果當前版本號和遠程一致,那么會提示已經(jīng)是最新版本:實現(xiàn)原理首先在遠程放置了一個文件,內(nèi)容包含最新版軟件的版本號、下載鏈接、 更新時間、更新說明等,當用戶點擊檢查更新時

2、,會訪問這個文件的地址, 并對文件內(nèi)容進行解析,得到最新的版本號、下載鏈接、更新時間、更新說 明等,如果版本號比當前軟件的版本號高,那么彈出更新窗口。我們先創(chuàng)建一個文本文件,可以是TXT格式、XML格式、JSON格式等等, 因為之前學(xué)習(xí)過JSON的解析,所以這里我選擇了 JSON格式,當然選擇其他 格式也都是可以的。命名為software_update.json,內(nèi)容如下:1.2.PulseSensor:3.4.LatestVerison:V1.1,5.Url: /XXX. XXX. XXX /Demo_v1.1.exe,6.UpdateTime:2019-03-31,7.ReleaseNot

3、e:n1.添加檢查更新說明,包含版本號,卜載鏈接,更新時間,更新說明.n2.優(yōu)化“關(guān)于”界面&,9.RGBContrl:10.11.LatestVerison:V1.0,12.Url: /*. *.*/Demo_v1.1.exe,13.UpdateTime:2019-03-30,14.ReleaseNote:版本說明15.16. 其中Url鍵值,是最新版軟件的下載地址,然后把這個文件存放到服務(wù)器上,可以通過鏈接直接訪問,如果有軟件發(fā)布,只需要修改這個文件的內(nèi)容:版本號、下載鏈接、更新說明、更新時間。當然,從文件內(nèi)容也可以看出,支持多個軟件的說明放在一起。Qt端的實現(xiàn)Qt端的實現(xiàn),主要使用到了網(wǎng)

4、絡(luò)請求和JSON解析兩個部分。pro文件添加網(wǎng)絡(luò)支持#網(wǎng)絡(luò)請求QT += network添加頭文件/網(wǎng)絡(luò)相關(guān)頭文件#include #include #include /JSON相關(guān)頭文件#include vQJsonDocument#include vQJsonObject#include 3對象的定義和函數(shù)的聲明QNetworkAccessManager *manager; / 定義網(wǎng)絡(luò)請求對象int parse_UpdateJSON(QString str); /解析數(shù)據(jù)函數(shù)的聲明void replyFinished(QNetworkReply *reply); /網(wǎng)絡(luò)數(shù)據(jù)接收完成槽函數(shù)

5、的聲明QString CurVerison = Vl.l; / 定義當前軟件的版本號4.連接信號與槽. manager = new QNetworkAccessManager(this); QNetworkAccessManager 對象/ 新建connect(manager, SIGNAL(finished(QNetworkReply*), this, SLOT(replyFinished(QNetworkReply*); 關(guān)聯(lián)信號和槽更新按鈕槽函數(shù)的實現(xiàn)當點擊檢查更新按鈕,會發(fā)送一個網(wǎng)絡(luò)請求,即上面的JSON文件的地址。void Pulse:on_btn_chkUpdate_clicked

6、()QNetworkRequest quest;quest.setUrl(QUrl(/software_update.json); /包含最新版本軟件的下載地址quest.setHeader(QNetworkRequest:UserAgentHeader,RT-Thread ART);manager-get(quest); / 發(fā)送 get 網(wǎng)絡(luò)請求接收完成槽函數(shù)的實現(xiàn)如果數(shù)據(jù)接收完成,那么會執(zhí)行這個槽函數(shù),函數(shù)里可以把接收的數(shù)據(jù)保存 到文件,或者直接進行解析,由于數(shù)據(jù)量較小,這里選擇了直接進行解析。void Pulse:replyFinished(QNetworkReply *reply)Q

7、String str = reply-readAll(); 讀取接收到的數(shù)據(jù)/ qDebug() str;parse_UpdateJSON(str);/文件保存到本地 TOC o 1-5 h z /*QFile file(software_update.json);if(!file.open(QIODevice:WriteOnly | QIODevice:Text) /append 內(nèi)容追加 在文件后面QMessageBox:critical(this, 錯誤,文件打開失敗,信息未寫入,確定 );return;QTextStream out(&file);out str; /輸出到文件file

8、.close(); /關(guān)閉文件qDebug() 文件保存成功!;/ file.remove();/ qDebug() deleteLater();/銷毀請求對象JSON文件的解析這個函數(shù)就是檢查更新功能實現(xiàn)的核心了,對接收到的JSON數(shù)據(jù)進行解析,并彈出窗口,根據(jù)用戶點擊的按鈕,執(zhí)行對應(yīng)的操作。int Pulse:parse_UpdateJSON(QString str)/ QMessageBox msgBox;QJsonParseError err_rpt;QJsonDocument root_Doc =QJsonDocument:fromJson(str.toUtf8(),&err_rpt

9、);字符串格式化為 JSONif(err_rpt.error != QJsonParseError:NoError)/ qDebug() CurVerison)QString warningStr =檢測到新版本!n 版本號:+ Verison + n +更新時間:+ UpdateTime + n + 更新說明:+ ReleaseNote;int ret = QMessageBox:warning(this,檢查更新, warningStr,去下載,不更新);if(ret = 0) / 點擊更新 TOC o 1-5 h z QDesktopServices:openUrl(QUrl(Url);elseQMessageBox:information(this,檢查更新,當前已經(jīng)是最新版本

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論