当前位置: 首页 > 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已经上传。

http://www.xdnf.cn/news/963523.html

相关文章:

  • golang学习随便记x[2,3]-字符串处理与正则表达式
  • 基于Java项目的Karate UI测试
  • Uniapp如何适配HarmonyOS5?条件编译指南以及常见的错误有哪些?
  • Spring @Autowired解析
  • NoSQL数据库技术详解:Redis与MongoDB的应用与实践
  • MODERNTCN:一种面向通用时间序列分析的现代纯卷积结构
  • 如何保障服务器的安全
  • 高防服务器中高防和硬防之间的区别
  • ASP4644电源芯片FB引脚:从原理到实战
  • 【FFmpeg学习(1)】图像表示
  • php利用createSheet生成excel表格(控制行高列宽、文本自动换行及表头字体样式)
  • Windows 命令行大全
  • JetBrains IntelliJ IDEA插件推荐
  • [创业之路-415]:经济学 - 价值、使用价值、交换价值的全面解析
  • CentOS7下的大数据NoSQL数据库HBase集群部署
  • 「多模态融合(ECG+PPG联合变异性分析)——ECG信号处理-第十六课」2025年6月10日
  • 屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
  • 校园二手交易平台(微信小程序版)
  • AtCoder 第409​场初级竞赛 A~E题解
  • pycharm最近遇到的一些问题
  • Linux 阻塞非阻塞
  • Ubuntu24.04常见问题
  • AbMole推荐:Cisplatin,从机制到应用的全面了解
  • Hive实现值列表横向展示(非列转行)
  • 汽车扭杆综合试验机
  • 机器人模型文件urdf介绍
  • C++基础学习:深入理解类中的构造函数、析构函数、this指针与new关键字
  • JWT令牌如何在FastAPI中实现安全又高效的生成与验证?
  • 解锁数据库简洁之道:FastAPI与SQLModel实战指南
  • 1.2 git使用