0%

Qt网络请求下载图片并且显示

Qt网络请求下载图片并且显示

基本流程

  • 字符串通过QUrl()变成Url对象,然后QNetworkRequest通过setUrl()方法设置URL,然后QNetworkManager通过get方法访问并且返回回复
QNetworkReply *newReply = netWorkManager->get(networkRequest);
  • 回复对象具有downloadProgress(qint64, qint64)readyRead()finished(),三个信号,其中downloadProgress(qint64, qint64)用来更新进度条,readyRead()表示此时已经有数据可以读取(可能还没结束),finished()表示此时接收已经结束可以读到完整的文件
QByteArray data = reply->readAll();
  • 上面是读取到回复的全文内容

更新进度条

void MainWindow::imageDownloadProgress(qint64 bytes, qint64 totalBytes)
{
static qint8 count = 0;
count++;
if(count == 1)
progressBar->setMaximum(totalBytes);

progressBar->setValue(bytes);
}

下载结束显示图片

void MainWindow::replyFinished()
{
//QNetworkReply *reply = (QNetworkReply *)sender();

//reply->deleteLater();

QNetworkReply *reply = (QNetworkReply *)sender();

QByteArray data = reply->readAll();
reply->deleteLater();

if(data.isEmpty())
{
qDebug()<<"data is null, please try it again!"<<endl;
return;
}

QPixmap pixmap;
pixmap.loadFromData(data);

label[0]->setPixmap(pixmap);

}

开始下载

void MainWindow::startDownload()
{
QUrl newUrl(QUrl(lineEdit->text()));
if(!newUrl.isValid())
{
QMessageBox::information(this, "error", "invalid url");
return;
}

QNetworkRequest networkRequest;

networkRequest.setUrl(newUrl);

QNetworkReply *newReply = netWorkManager->get(networkRequest);

connect(newReply, SIGNAL(finished()), this, SLOT(replyFinished()));
connect(newReply, SIGNAL(readyRead()), this, SLOT(readyReadData()));
connect(newReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(imageDownloadProgress(qint64, qint64)));
}