概述
通过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实现简单的程序自动更新所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复