QSimpleUpdater:解锁 Qt 应用自动更新的全新姿势

目录

1.简介

2.核心优势

3.更新流程图

4.使用方法

5.常问问题


1.简介

在软件开发领域,应用更新是维持用户体验的关键环节。对于 Qt 开发者而言,实现高效、稳定的自动更新功能往往面临诸多挑战。本文将深入解析 QSimpleUpdater 这一轻量级第三方模块,从原理到实战,带你解锁 Qt 应用自动更新的全新方式。

下载地址:https://gitee.com/YDusky/QSimpleUpdater

解决了传统更新方案的痛点:

  • 实现复杂:原生 Qt 需手动处理网络请求、版本比对、安装包下载等流程
  • 跨平台适配难:Windows、macOS、Linux 需分别处理更新逻辑
  • 用户体验差:更新过程可能出现卡顿、进度不明确等问题

更新界面:

更新中

更新完成

2.核心优势

|------------|---------------------------------------|
| 特性 | 优势说明 |
| 轻量级集成 | 仅需引入头文件和库文件,无需修改项目架构 |
| 跨平台支持 | 一套代码适配 Windows/macOS/Linux,兼容 Qt 5.6+ |
| 全流程自动化 | 自动检测更新、下载安装包、重启应用,支持断点续传 |
| 高度可定制 | 自定义更新界面、网络请求策略、版本校验规则 |
| 低耦合设计 | 不依赖 Qt 额外模块,可独立集成到现有项目 |

3.更新流程图

4.使用方法

  1. 在项目源码地址下载源码(https://github.com/alex-spataru/QSimpleUpdater)。
  2. 将QSimpleUpdater文件夹复制到"3rd-party"文件夹中。
  3. 在你的项目文件中(*.pro)包含QSimpleUpdater.pri文件即可使用。

5.常问问题

1.如何检测更新

QSimpleUpdater先下载一个json格式的升级定义文件。这个文件指定了各个平台的最新版本、下载链接和更新日志。如果需要的话可以注册你自己的平台。

接着QSimpleUpdater会对比本地版本和远程版本,如果远程版本高于本地版本,说明存在一个可用的更新,并通知用户。

一个典型的升级定义文件updates.json

cpp 复制代码
{
  "updates": {
    "windows": {
      "open-url": "",
      "latest-version": "1.0",
      "download-url": "https://raw.githubusercontent.com/alex-spataru/QSimpleUpdater/master/tutorial/download/YesItWorks.jpg",
      "changelog": "This is an example changelog for Windows. Go on...",
      "mandatory": true
    },
    "osx": {
      "open-url": "",
      "latest-version": "1.0",
      "download-url": "https://raw.githubusercontent.com/alex-spataru/QSimpleUpdater/master/tutorial/download/YesItWorks.jpg",
      "changelog": "This is an example changelog for Mac OS X. Go on...",
      "mandatory": true
    },
    "linux": {
      "open-url": "",
      "latest-version": "1.0",
      "download-url": "https://raw.githubusercontent.com/alex-spataru/QSimpleUpdater/master/tutorial/download/YesItWorks.jpg",
      "changelog": "This is an example changelog for Linux. Go on...",
      "mandatory": true
    },
    "ios": {
      "open-url": "",
      "latest-version": "1.0",
      "download-url": "https://raw.githubusercontent.com/alex-spataru/QSimpleUpdater/master/tutorial/download/YesItWorks.jpg",
      "changelog": "This is an example changelog for iOS. Go on...",
      "mandatory": true
    },
    "android": {
      "open-url": "",
      "latest-version": "1.0",
      "download-url": "https://raw.githubusercontent.com/alex-spataru/QSimpleUpdater/master/tutorial/download/YesItWorks.jpg",
      "changelog": "This is an example changelog for Android. Go on...",
      "mandatory": true
    }
  }
}

2.能自定义升级通知么

答案是Yes,不仅可以通过QSimpleUpdater的接口来启用/关闭内置的通知,还可以连接QSimpleUpdater的信号自己实现通知。

在tutorial的界面中,可以看到五个复选框,分别表示:

●是否开启所有通知

●更新可用时是否通知我

●是否使用内置的下载器

●是否使用内置的检测通知

●是否强制升级

这五个复选框分别对应五个接口

cpp 复制代码
QSimpleUpdater::getInstance->setNotifyOnFinish(url, false);
QSimpleUpdater::getInstance->setNotifyOnUpdate(url, true);
QSimpleUpdater::getInstance->setDownloaderEnabled(url, true);
QSimpleUpdater::getInstance->setUseCustomAppcast(url, false);
QSimpleUpdater::getInstance->setMandatoryUpdate(url, false);

3.应用程序能否直接下载更新?

对。如果有可用的更新,库将提示用户是否要下载更新。您可以使用以下代码启用或禁用集成下载器:

cpp 复制代码
QString url = "https://MyBadassApplication.com/updates.json";
QSimpleUpdater::getInstance()->setDownloaderEnabled (url, true);

4.为何每个接口都要指定URL

QSimpleUpdater允许您使用不同的更新程序实例,可以通过更新定义的URL访问这些实例。虽然不一定要使用多个更新程序实例,但这对于使用插件或不同模块的应用程序很有用。

假设你正在开发一款游戏,在这种情况下,你可以使用以下代码:

cpp 复制代码
// Update the game textures
QString textures_url = "https://MyBadassGame.com/textures.json"
QSimpleUpdater::getInstance()->setModuleName    (textures_url, "textures");
QSimpleUpdater::getInstance()->setModuleVersion (textures_url, "0.4");
QSimpleUpdater::getInstance()->checkForUpdates  (textures_url);

// Update the game sounds
QString sounds_url = "https://MyBadassGame.com/sounds.json"
QSimpleUpdater::getInstance()->setModuleName    (sounds_url, "sounds");
QSimpleUpdater::getInstance()->setModuleVersion (sounds_url, "0.6");
QSimpleUpdater::getInstance()->checkForUpdates  (sounds_url);

// Update the client (name & versions are already stored in qApp)
QString client_url = "https://MyBadassGame.com/client.json"
QSimpleUpdater::getInstance()->checkForUpdates (client_url);

下载地址:

https://github.com/alex-spataru/QSimpleUpdater
https://gitee.com/YDusky/QSimpleUpdater

相关推荐
不会写DN1 分钟前
Js常用数组处理
开发语言·javascript·ecmascript
还是大剑师兰特2 分钟前
数组中有两个数据,将其变成字符串
开发语言·javascript·vue.js
2301_776508722 分钟前
C++中的职责链模式实战
开发语言·c++·算法
sqyno1sky4 分钟前
C++中的空对象模式
开发语言·c++·算法
星轨初途5 分钟前
C++ 类和对象(下):初始化列表、static 成员与编译器优化深度剖析
android·开发语言·c++·经验分享·笔记
量子炒饭大师6 分钟前
【C++ 入门】Cyber动态义体——【vector容器】vector底层原理是什么?该怎么使用他?一文带你搞定所有问题!!!
开发语言·c++·vector·dubbo
学嵌入式的小杨同学8 分钟前
STM32 进阶封神之路(二十三):低功耗深度解析 —— 从睡眠模式到停机模式(底层原理 + 寄存器配置)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
AC赳赳老秦8 分钟前
OpenClaw 系统监控实战指南:构建高效的电脑/服务器状态监控与自动告警系统
服务器·开发语言·人工智能·php·ai-native·deepseek·openclaw
宝耶10 分钟前
Java面试题5:List、Set、Map 的区别?各自有哪些实现类?
java·开发语言·list
Cosmoshhhyyy10 分钟前
《Effective Java》解读第44条:坚持使用标准的函数接口
java·开发语言