QT QLabel加载网络图片

1.简单加载方法:

void widget::on_pushButton_clicked(){

    QString szUrl="https://XXX9a74.jpg";

    QUrl url(szUrl);

    QNetworkAccessManager manager;

    QEventLoop loop;

    // qDebug() << "Reading picture form " << url;

    QNetworkReply *reply = manager.get(QNetworkRequest(url));

    //请求结束并下载完成后,退出子事件循环

    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

    //开启子事件循环

    loop.exec();

    QByteArray jpegData = reply->readAll();

    QPixmap pixmap;

    pixmap.loadFromData(jpegData);

    ui->label->setPixmap(pixmap); // 你在QLabel显示图片

}

2.保存文件到本地

void widget::downloadFileFromUrl(QString strUrl, QString strFilePath){

    qDebug() << strUrl << "    " << strFilePath;

    QFile file;

    file.setFileName(strFilePath);

    if(file.open(QIODevice::WriteOnly))

    {

        QByteArray byte = InitGetRequest(strUrl, "downImgFromUrl");

        file.write(byte);

        file.close();

    }

}

//get

QByteArray widget::InitGetRequest(QString url, QString obj)

{

    //循环拼接

    QString baseUrl =url;

    //构造请求

    QNetworkRequest request;

    request.setUrl(QUrl(baseUrl));

    QNetworkAccessManager *manager = new QNetworkAccessManager();

    // 发送请求

    QNetworkReply *pReplay = manager->get(request);

    //开启一个局部的事件循环,等待响应结束,退出

    QEventLoop eventLoop;

    QObject::connect(pReplay,SIGNAL(finished()), &eventLoop, SLOT(quit()));


 

    //add timeout deal

    QTimer *tmpTimer = new QTimer();

    connect(tmpTimer,SIGNAL(timeout()),&eventLoop, SLOT(quit()));

    tmpTimer->setSingleShot(true);

    tmpTimer->start(5000);

    eventLoop.exec();

    tmpTimer->stop();


 

    if (pReplay->error() == QNetworkReply::NoError)

    {

        qInfo() << QString("request %1 NoError").arg(obj);

    }

    else

    {

        qWarning()<<QString("request %1 handle errors here").arg(obj);

        QVariant statusCodeV = pReplay->attribute(QNetworkRequest::HttpStatusCodeAttribute);

        //statusCodeV是HTTP服务器的相应码,reply->error()是Qt定义的错误码,可以参考QT的文档

        qWarning()<<QString("request %1 found error ....code: %2 %3").arg(obj).arg(statusCodeV.toInt()).arg((int)pReplay->error());

        qWarning(qPrintable(pReplay->errorString()));

    }

    //获取响应信息

    QByteArray bytes = pReplay->readAll();

    return bytes;}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值