我正在尝试下载黑莓级联,C++,QT的图像。
我基本上使用的代码看起来像这样:
void MyClass::download() {
QUrl url(imagePath);
QNetworkRequest request(url);
Q_ASSERT(connect(networkAccessManager_, SIGNAL(finished(QNetworkReply *)), this, SLOT(saveImage(QNetworkReply *))));
networkAccessManager_->get(request);
}
void MyClass::saveImage(QNetworkReply *) {
QByteArray imageData = reply->readAll();
if (reply->error() != QNetworkReply::NoError) {
qDebug() << "an error occured downloading the image";
return;
}
qDebug() << imageData;
//...当我这样做的时候,imageData只包含:“˜,而不是我下载的图像的全部内容。
有人能给我解释一下吗?我该怎么做呢?
发布于 2012-10-25 04:04:30
实际上,我认为图像正在下载中。我以为它只有几个字节被下载,但实际上它不仅仅是几个字节-这就是为什么当用qDebug打印出来时没有显示右引号的原因(整个图像在一行上)。
发布于 2012-10-19 18:48:50
它是QByteArray格式的,这就是为什么它会这样显示的原因。只需将其传入Image对象的构造函数,如下所示:
Image image = Image(reply->readAll());
imageView->setImage(image);应该能行得通。如果不这样做,图像将会太大而无法放入ImageView。级联ImageView可以处理的图像的最大尺寸为2048。因此您可能必须使用ImageData类将大图像复制到级联ImageView中。
我也试着从这个url加载图像,它适用于这个url,不需要使用任何ImageData类
发布于 2012-10-19 05:03:03
您可能希望检查QNetworkReply是否将您重定向到实际图像。如果是,您将收到一个新的QUrl,该QUrl将用于获取新的请求。查看QNetworkRequest::Attributes的文档
void MyClass::saveImage(QNetworkReply *reply) {
QUrl redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
if( redirect.isValid() ) {
QNetworkRequest request(redirect);
networkAccessManager_->get(request);
}
else {
QByteArray imageData = reply->readAll();
if (reply->error() != QNetworkReply::NoError) {
qDebug() << "an error occured downloading the image";
return;
}
qDebug() << imageData;
}
}https://stackoverflow.com/questions/12960592
复制相似问题