【发布时间】:2016-04-04 22:59:57
【问题描述】:
我正在尝试实现一个简单的下载器。但我被卡住了,因为我的回复和它的标题是空的。
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QtDebug>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/reply/main.qml"));
viewer.showExpanded();
QUrl url("http://www.speedtest.qsc.de/10MB.qsc");
QNetworkRequest request( url );
request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
QByteArray range;
range = "bytes=" + QByteArray::number( 0 ) + "-";
request.setRawHeader("Range", range );
QNetworkAccessManager accessManager;
QNetworkReply* reply = accessManager.get( request );
qDebug() << __FILE__ << ":" << __LINE__ << reply->size();
QList<QByteArray> headerFields = reply->rawHeaderList();
qDebug() << __FILE__ << ":" << __LINE__ << headerFields.count();
for( qint64 i = 0; 0 < headerFields.count(); i++ ) {
QString string( headerFields.at(i));
qDebug() << __FILE__ << ":" << __LINE__ << string;
}
return app.exec();
}
我该怎么做才能让我的回复不再是空的? 提前致谢!
【问题讨论】:
-
您需要等待回复。 See this question
-
我添加了 QEventLoop 循环;连接(回复,信号(完成()),&循环,SLOT(退出()));循环.exec();下面 QNetworkReply* 回复 = accessManager.get(request);我得到错误:使用未声明的标识符“连接”。这个错误是什么意思?
-
人们认为您通常在某个 QT 类中执行此操作。只需使用
QObject::connect而不是connect -
哦,更不用说
connect将无法工作,除非事件循环启动。因此,您应该在app.exec()启动后将代码移动到某个位置。 -
感谢您的提示。在实际应用程序(不是上面的演示)中,我使用了多个 NetworkAccessManager 导致问题的原因是因为我不知道每个应用程序只能使用一次:-/ :-)
标签: qt qnetworkreply