QT程式自動公升級方案

2021-10-21 08:38:07 字數 3320 閱讀 6899

基於q******updater, 但是q******updater無法在qml應用下使用,因此對其做了一定封裝,,特點如下:

下面上**

qt.pro檔案裡面新增q******updater依賴

include ($$pwd/q******updater/q******updater.pri)
c class

qmlmqttclient.cpp

#pragma execution_character_set("utf-8")

#include

"qmlupdater.h"

#include

#include

#include

#include

#include

qmlupdater:

:qmlupdater

(qobject *parent)

:qobject

(parent)

qmlupdater::~

qmlupdater()

void qmlupdater:

:checkforupdates()

void qmlupdater:

:updatechangelog

(const qstring &url)

}void qmlupdater::(

const qstring &url,

const qbytearray &reply)

/* try to create a json document from downloaded data */

**sondocument document = **sondocument:

:fromjson

(reply)

;/* json is invalid */

if(document.

isnull()

)/* get the platform information */

**sonobject updates = document.

object()

.value

("updates").

toobject()

; **sonobject platform =

updates.

value

(m_updater->

getplatformkey

(url)).

toobject()

;/* get update information */

qstring m_openurl = platform.

value

("open-url").

tostring()

; qstring m_changelog = platform.

value

("changelog").

tostring()

; m_downloadurl = platform.

value

("download-url").

tostring()

; qstring m_latestversion = platform.

value

("latest-version").

tostring()

;if(platform.

contains

("mandatory-update"))

if(compare

(m_latestversion, m_updater->

getmoduleversion

(url)))

}void qmlupdater:

:finish

(qstring filepath)

void qmlupdater:

:startdownload()

bool qmlupdater:

:compare

(const qstring &x,

const qstring &y)

return versionsy.

count()

< versionsx.

count()

;}

標頭檔案qmlupdater.h

#ifndef updater_h

#define updater_h

#include

#include

#include

namespace ui

class q******updater;

class qmlupdater : public qobject

;#endif

// updater_h

qml 檔案 updatepage.qml

import qtquick 2.0

import qtquick.controls 2.0

import qtquick.controls.material 2.0

import qtquick.window 2.2

import qmlupdater 1.0

window

ondownloadfinished:

} rectangle

} textedit

button

button

label

label }}

/*##^##

designer dddd}

##^##*/

main 裡面註冊qml型別

qmlregistertype

("qmlupdater",1

,0,"qmlupdater"

);

qml main page 裡面例項化

import qtquick 2.12

import qtquick.controls 2.5

import qt.labs.settings 1.0

visible:

true

width:

800 height:

640 updatepage

}

就這樣,程式執行後自動檢查更新伺服器更新json檔案;

,"osx":,

"linux":,

"ios":,

"android":}

}

C S程式自動公升級

c s程式自動公升級是乙個很重要的功能,原理其實很簡單,一般包含兩個程式乙個是主程式,也就是除了公升級功能以外的程式,另乙個就是公升級程式,常見的360,金山安全衛士都是這樣。一般服務端會有乙個配置檔案包含最新更新的檔案資訊的配置檔案,當然這些更新資訊也可以存到資料庫,或者其他地方。客戶端 也就是需...

IT C S自動公升級程式原理

背景 執行形式 原理 我們都知道,當乙個程式或檔案正在執行的時候,我們是無法對它進行刪除或修改等操作,一般情況都是因為目標正在被占用。同樣,當你執行乙個軟體,檢測到新版本的時候你不能直接將自己給替換了,因為此時該軟體正處於乙個執行狀態。這就需要第三方程式來幫助你進行這個公升級更新的動作。自動公升級程...

IT C S自動公升級程式原理

背景 執行形式 原理 我們都知道,當乙個程式或檔案正在執行的時候,我們是無法對它進行刪除或修改等操作,一般情況都是因為目標正在被占用。同樣,當你執行乙個軟體,檢測到新版本的時候你不能直接將自己給替換了,因為此時該軟體正處於乙個執行狀態。這就需要第三方程式來幫助你進行這個公升級更新的動作。自動公升級程...