|
10Qter豆
我从服务器获取10个照片的url,每个url最后是照片的名字,我想一张一张的下载,然后保存成各自照片的名字,下面是我的请求照片和下载的程序,为什么请求照片之后没有等到照片下载完了就请求第二张照片呢,导致最后保存的只有最后一张照片,大家帮我看看,是我哪里错了呢,还是它的机制就是这样的,太着急了,谢谢啊
void HttpThread::startDownloadSlot()
{
qDebug()<<"download......";
qDebug()<<"requestDownload id::"<<QThread::currentThreadId();
getManger = new QNetworkAccessManager(this);
QObject::connect(getManger,SIGNAL(finished(QNetworkReply*)),this,SLOT(downImageReplySlot(QNetworkReply*)));
for(int i=0;i<picUrlList.count();i++)
{
QNetworkRequest re;
re.setUrl(QUrl(picUrlList));
qDebug()<<picUrlList;
picRes.picName = picNameList;
qDebug()<<picRes.picName;
getManger->get(re);//这里执行完了之后,为什么不去执行downImageReplySlot(QNetworkReply*)槽呢,而是继续for循环,结果保存的名字就不对了
}
qDebug()<<"download end...";
}
下面是downImageReplySlot(QNetworkReply*)槽里的代码:
imageData = reply->readAll();
qDebug()<<picRes.picName;
if(image.loadFromData(imageData,"JPG"))
{
qDebug()<<"JPG";
if(image.save(tmpPath.append(picRes.picName)))
{
qDebug()<<"QQQQQQQQQQQQQQQQWWWWWWWWWWWWWWWWWWWWWWEEEEEE";
}
else
{
qDebug()<<"this pic download falied,jump next";
}
}
|
最佳答案
查看完整内容
信号槽机制是异步的,而不是同步机制,也就是说你不能把它当成一个函数来使用。你for都没执行完,怎么能跳到去执行downImageReplySlot(QNetworkReply*)槽呢?
|