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。