当前位置: 首页 > news >正文

【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已经上传。

相关文章:

  • 在微服务架构中,怎么搭建Maven私服
  • eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
  • 力扣HOT100之堆:215. 数组中的第K个最大元素
  • docker 安装 milvus standalone 版本 + attu
  • spark数据处理练习题番外篇【下】
  • 空间注意力机制
  • 如何判断一个bug,是前端还是后端的?
  • 积累-Vue.js 开发实用指南:ElementUI 与核心技巧
  • 【动作】动作标签分类的三大模块
  • 如何在看板中体现优先级变化
  • 【沉浸式求职学习day53】【Spring】
  • 3.3.1_1 检错编码(奇偶校验码)
  • 智能呼入系统助力酒店客服服务
  • 立足数字人文,深化历史叙事|科学智能赋能人文社科领域研究
  • 扁平表+递归拼树思想
  • PyTorch终极实战:从自定义层到模型部署全流程拆解​
  • JS深入之从原型到原型链
  • 替代爬虫!亚马逊API采集商品详情实时数据开发教程
  • 苹果签名应用掉签频繁原因排查,以及如何避免
  • 第十六章 I2C
  • 电脑网站和手机网站怎么做相同路径/百度关键词推广
  • 珲春建设银行网站/百度关键词排名
  • 微信菜单怎么做微网站/优化疫情二十条措施
  • 2019建设银行招聘网站/南昌seo公司
  • 做网站除了买域名还有什么/求老哥给几个靠谱的网站
  • 印记室内设计网站/站长工具 站长之家