赞
踩
- QJsonObject jUrlObj = jPageObj.value("ImageInfo").toObject();
- QString str = QString::fromLocal8Bit(jUrlObj.value("Url").toVariant().toString().toLocal8Bit().data());
- printf("ftp下载:%s", str.toLocal8Bit().data());
此处打印数据的 URL 中文展示正常。
接下来就是对URL传值进行下载图片了。
- bool DownLoad(QString strUrl, QByteArray& qbaBuf)
- {
- //申请一个网络操作管理对象
- QNetworkAccessManager* manager = new QNetworkAccessManager();
-
- char imgFormat[8]= "bmp";
- //获取url
- QUrl url = QUrl(strUrl);
- QNetworkReply* reply = manager->get(QNetworkRequest(url));
- //阻塞,等待图片下载完成, 然后函数退出
- QEventLoop eventLoop;
- manager->connect(manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
- QTimer::singleShot(3000, &eventLoop,SLOT(quit()));
- eventLoop.exec();
-
- QNetworkReply::NetworkError err = reply->error();
- if (QNetworkReply::NoError != err)
- {
- manager->deleteLater();
- reply->deleteLater();
- return false;
- }
-
- QByteArray qbaBufRes = reply->readAll();
-
- qDebug() << QString::fromLocal8Bit("*****DownLoad 图片下载url:") << strUrl << QString::fromLocal8Bit("size:") << qbaBufRes.size();
-
- QImage qImgRes;
- qImgRes.loadFromData(qbaBufRes);
-
- QBuffer buffer;
- qImgRes.save(&buffer, imgFormat);
- qbaBuf.clear();
- qbaBuf.append(buffer.data(), buffer.size());
-
- qDebug() << QString::fromLocal8Bit("图片下载数据,大小: ") << qbaBuf.size();
- manager->deleteLater();
- reply->deleteLater();
-
- if (qbaBuf.size() > 0)
- {
- return true;
- }
- else
- {
- return false;
- }
- }

若是QJson解析后,有数据结构体赋值传输,例如我遇到的问题:
将QString 转存到了一个结构体的string值中,将这个值带入到图片内容解析后,触发下载函数,获取string的url内容。
- CImageInfo.m_url = str.toLocal8Bit().data(); //此处str为QString的内容,转到string
- QByteArray f_qba; //图片信息
- DownLoad(QString::fromLocal8Bit(CImageInfo.m_url.c_str()), f_qba); //调用图片下载函数时,再转回QString。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。