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