Qt实现简单的程序自动更新

通过xml文件来获取更新文件的网络路径和文件的md5(用于校验文件是否下载对了)。然后依次通过QNetworkAccessManager::get(),下载下来就算完成了。

更新操作主要由一个类来实现Updater。

类定义如下:

class Updater : public QObject
{
    Q_OBJECT
public:
    //传递xml文件的本地路径,md5值用于校验文件是否正确,TextEdit和进度条用于将结果反馈给主界面
    explicit Updater(QString xmlFile, QString xmlFileMd5, QTextEdit * output, QProgressBar * progressBar, QObject *parent = 0);
    //启动更新
    void start();
    //文件下载的保存路径,默认是当前路径
    void setSaveDir(QString dir);
    QString getSaveDir();
private:
    //功能函数,获得文件的md5
    QByteArray getFileMd5(QString filePath);
    //根据xml文件的File Element的内容,下来对应的文件,第二个参数主要是用于校正失败的时候重新下载该文件。
    void downloadFile(QDomElement e, bool reDownload = false);
    //通过校正下载来的文件是否正确
    void checkFile(QString filePath, QString md5);

private slots:
    //响应QNetworkAccessManager::get()的槽函数
    void on_finished(QNetworkReply* reply);
    //下载完成的时候emit downloadOk,这是槽函数
    void on_downloadOk();
    //用于更新进度条
    void on_downloadProgress(qint64 bytesSent, qint64 bytesTotal);

private:
    QNetworkAccessManager * mManager;
    QDomDocument * mDom;
    QDomElement mRootElement, mCurrentFileElement;
    QDomNodeList mFileNodeList;
    QString mRemotePathUrl, mVersion;
    QString mXmlFile, mXmlFileMd5;
    QStringList mFileList;
    QString mSaveDir;
    QString FILEPATH, FILE;
    int mCurrentIndex, mTotalFile;
    int BUF_SIZE;
    char * mDataBuf;
    QTextEdit * mOutputEdit;
    QProgressBar * mProgressBar;
signals:
    //当前正在下载的这个文件下载好了
    void downloadOk();
    //用于通知主界面更新操作完成了
    void updateFinished();
};
主程序需要把xml文件的url和md5作为参数传递给更新程序。由更新程序负责把xml文件下载到本地之后,再把本地xml的路径和参数传递的md5作为参数再传递给Updater对象,调用start即可执行更新,完成之后再启动主程序。

链接:http://download.csdn.net/detail/xyping_/9681315

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值