【问题标题】:QNetworkReply is emptyQNetworkReply 为空
【发布时间】: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


【解决方案1】:

我使用了多个QNetworkAccessManager,这就是导致问题的原因,因为我不知道每个应用程序只能使用一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多