Http即超文本传输协议,之前qt3中是QHttp类 但是qt4已经用QNetworkAccessManager类进行替代了
QNetworkAccessManager类进行网络请求与接受回复,具体是用QNetworkRequest类来管理请求,QNetworkReply类进行接受回复,并对数据进行处理 比如:
QNetworkAccessManager *manger;
manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
connect(manager,SIGNAL(finished(QNetworkReply*)), //关联信号和槽
this,SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl(“http://www.baidu.com”))); //发送请求
在replyFinished槽函数中我们可以获取相应的网页文本信息。
在下载文件的时候 如果需要看到文件的下载进度 也是可以实现的 比如:
QNetworkReply *reply;
QFile *file;
QUrl url;
url="http://www.xxx.com/hhh.zip";
file = new QFile("hhh.zip");
reply = manager->get(QNetworkRequest(url));
connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));
connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));
connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));
...
...
void Widget::httpReadyRead()
{
if ( file) file-> write( reply-> readAll());
}
void Widget::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
{
ui->progressBar->setMaximum(totalBytes); //最大值
ui->progressBar->setValue(bytesRead); //当前值
}
大体上就是这个思路,就应该可以看到进度条了
这里面有两个细节问题:
1:file = new QFile("hhh.zip");
其实需要判断下file文件是否可读写 最好加上这个判断
if(!file->open(QIODevice::WriteOnly))
{ //如果打开文件失败,则删除file,并使file指针为0,然后返回
qDebug() << "file open error";
delete file;
file = 0;
return;
}
2:在下载完成下载之后进行的一些善后操作
void Widget::httpFinished() //完成下载
{
file->flush();
file->close();
reply->deleteLater();
reply = 0;
delete file;
file = 0;
}
这样关于Http下载就基本算作完成了,以上是借助参考资料:http://www.yafeilinux.com/?p=734 做的一些小笔记。