C++ 为什么我无法使用此代码下载文件
我正在做一个学校的项目,几个星期以来我一直在努力适应,但它给了我一个空的QByteArray。我真的需要这段代码,因为我的整个项目都基于这段代码 这是我的密码:C++ 为什么我无法使用此代码下载文件,c++,qt,download,C++,Qt,Download,我正在做一个学校的项目,几个星期以来我一直在努力适应,但它给了我一个空的QByteArray。我真的需要这段代码,因为我的整个项目都基于这段代码 这是我的密码: namespace Pixmap { static QByteArray *bitmap; QPixmap downloadPixmap(const QUrl &url); QPixmap downloadPixmap(const QString &url); } QPixmap Pixmap::downloadPi
namespace Pixmap {
static QByteArray *bitmap;
QPixmap downloadPixmap(const QUrl &url);
QPixmap downloadPixmap(const QString &url);
}
QPixmap Pixmap::downloadPixmap(QUrl const& url)
{
QNetworkAccessManager access_manager;
QNetworkReply *reply = access_manager.get(
QNetworkRequest(url)
);
QPixmap pix;
bitmap = &reply->readAll();
reply->close();
if (/*!bitmap->isNull() && */ !reply->readAll().isNull()) {
pix.loadFromData(*bitmap);
return pix;
} else {
// Apparemment aux tests 1 et 2 pas d'erreurs.
qDebug("Damned");
return QPixmap();
}
}
QPixmap Pixmap::downloadPixmap(QString const& url)
{
return downloadPixmap(QUrl(url));
}
我认为解决方案是使用静态变量来接收数据的回复,但事实并非如此
你能给我一些建议吗
我目前正在使用Qt5.3在Windows上开发
谢谢大家
编辑1:
所以我把Nejat的第二个解决方案和
结果不是结论。不支持调试程序HTTP协议
Can't download "http://127.0.0.1/Acompte/MCD_Ordi.jpg" : "Protocol type not supported"
if (reply->waitForReadyRead(-1)) //! @bug this does not work as supposed, waitForRead returns false and returns INSTANTLY!!
qDebug() << "ReadyRead yeha!!!";
if (reply->error()) {
qDebug() << "Can't download" << reply->url().toString()
<< ":" << reply->errorString();
} else {
bitmap = reply->readAll();
qDebug() << "Saving IMG";
}
Can't download "http://127.0.0.1/Acompte/MCD_Ordi.jpg" : "Protocol type not supported"
if (reply->waitForReadyRead(-1)) //! @bug this does not work as supposed, waitForRead returns false and returns INSTANTLY!!
qDebug() << "ReadyRead yeha!!!";
if (reply->error()) {
qDebug() << "Can't download" << reply->url().toString()
<< ":" << reply->errorString();
} else {
bitmap = reply->readAll();
qDebug() << "Saving IMG";
}
无法下载“http://127.0.0.1/Acompte/MCD_Ordi.jpg“:“不支持协议类型”
如果(回复->waitForReadyRead(-1))/@bug这不按预期工作,waitForRead返回false并立即返回!!
qDebug()错误(){
qDebug()必须设置access\u管理器的完成信号
connect(access_manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(myFunctionToHandleReply(QNetworkReply *)));
您的myFunctionToHandleReply必须处理回复:
void MyApp::myFunctionToHandleReply(QNetworkReply *reply) {
QByteArray data = reply->readAll();
}
带有QNetworkAccessManager信号的文档:您还可以通过将QNetworkAccessManager的完成的信号连接到插槽,以异步方式执行此操作:
connect(&access_manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinished(QNetworkReply*)));
并在此处读取数据:
void onFinished(QNetworkReply* reply)
{
if (reply->error() == QNetworkReply::NoError)
{
QByteArray bts = reply->readAll();
...
}
}
您还可以使用事件循环等待回复完成,然后读取可用字节:
QNetworkAccessManager access_manager;
QNetworkReply *reply = access_manager.get(QNetworkRequest(url));
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
loop.exec();
QByteArray bts = reply->readAll();
...
所以我把Nejat的第二个解决方案和
结果不是结论。不支持HTTP协议
Can't download "http://127.0.0.1/Acompte/MCD_Ordi.jpg" : "Protocol type not supported"
if (reply->waitForReadyRead(-1)) //! @bug this does not work as supposed, waitForRead returns false and returns INSTANTLY!!
qDebug() << "ReadyRead yeha!!!";
if (reply->error()) {
qDebug() << "Can't download" << reply->url().toString()
<< ":" << reply->errorString();
} else {
bitmap = reply->readAll();
qDebug() << "Saving IMG";
}
Can't download "http://127.0.0.1/Acompte/MCD_Ordi.jpg" : "Protocol type not supported"
if (reply->waitForReadyRead(-1)) //! @bug this does not work as supposed, waitForRead returns false and returns INSTANTLY!!
qDebug() << "ReadyRead yeha!!!";
if (reply->error()) {
qDebug() << "Can't download" << reply->url().toString()
<< ":" << reply->errorString();
} else {
bitmap = reply->readAll();
qDebug() << "Saving IMG";
}
你不需要删除QObjor派生对象。< /P>你必须在发送GET请求和在响应中读取数据之间等待,但是你不需要t.Hi Vahancho,通过展示一个例子来解释这个问题是很好的;-我去了事件循环。这里是我的编译器(Visual C++ 2013)返回:QObject::connect:无此类信号QNetworkReplyHttpImpl::error()在..\horaires\u de_commerces\pixmap.cpp:12Damned@SteveHuguenin您还应该提供
error
signal的参数类型。请参阅更新后的答案。谢谢!奇怪的是,Qt Creator没有显示要输入的参数。这不是答案。如果有其他问题,您应该编辑问题或询问新问题。@Nejat您的评论是正确的,但不幸的是,我仍然无法使用Qt和他的QNetworkReply下载任何文件…那个地址是什么。你正在尝试从本地主机下载吗?你有web服务器吗?那是。我可以用我的web浏览器查看它。所以我看不出有什么问题。