我是靠谱客的博主 拼搏雨,最近开发中收集的这篇文章主要介绍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

最后

以上就是拼搏雨为你收集整理的Qt实现简单的程序自动更新的全部内容,希望文章能够帮你解决Qt实现简单的程序自动更新所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部