Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用QNetworkAccessManager从web检索数据:文件已下载,但QNetworkReply::readAll返回null_C++_Qt_Qtnetwork - Fatal编程技术网

C++ 使用QNetworkAccessManager从web检索数据:文件已下载,但QNetworkReply::readAll返回null

C++ 使用QNetworkAccessManager从web检索数据:文件已下载,但QNetworkReply::readAll返回null,c++,qt,qtnetwork,C++,Qt,Qtnetwork,同样的问题已经存在,但单一的答案没有帮助: 因此,我尝试下载一个文件: QNetworkRequest request; request.setUrl(QUrl(fileUrl)); QNetworkReply * reply = m_nam.get(request); connect(reply, SIGNAL(finished()), this, SLOT(onDownloadRequestFinished()), Qt::UniqueConnection); connect(reply,

同样的问题已经存在,但单一的答案没有帮助:

因此,我尝试下载一个文件:

QNetworkRequest request;
request.setUrl(QUrl(fileUrl));
QNetworkReply * reply = m_nam.get(request);
connect(reply, SIGNAL(finished()), this, SLOT(onDownloadRequestFinished()), Qt::UniqueConnection);
connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(onDownloadRequestProgress(qint64, qint64)), Qt::UniqueConnection);
onDownloadRequestFinished
插槽中:

QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
if (reply && reply->error() == QNetworkReply::NoError) {
   Q_ASSERT(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200);
   qDebug() << "reply " << reply->bytesAvailable() << reply->pos() << reply->size() << reply->isReadable() << reply->openMode() << reply->isOpen();
}
QNetworkReply*reply=qobject_cast(sender());
如果(回复和回复->错误()==QNetworkReply::NoError){
Q_断言(应答->属性(QNetworkRequest::HttpStatusCodeAttribute).toInt()==200);
qDebug()是否已连接readyRead()信号以将接收到的字节写入特定文件

我总是这样做来保存文件:

 const QNetworkRequest& request = QNetworkRequest(url);
 reply = qnetworkaccessmanager->get(request);
 QObject::connect(reply, SIGNAL(readyRead()), this,
        SLOT( readingReadyBytes() ));
然后我创建我的插槽:

 void yourClass::readingReadyBytes() {
    file->write(reply->read(reply->bytesAvailable()));
 }

请检查
reply->attribute(QNetworkRequest::HttpStatusCodeAttribute)
value@PavelStrakhov:我还有
Q\u断言(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()=200);
,它不会触发。请更新代码以包含它。您是否通过网络嗅探器查看收到的数据?@peppe:我手头没有嗅探器,但我100%确定文件正在下载。我会尝试一下,但不认为这会有任何区别。我在问题中指定的基本代码是正确的,因为它在另一个p项目。我没有使用QNetworkAccessManager之类的工具来开发它,所以我记不太清楚,但是如果没有readyRead(),如何保存物理数据呢?我的问题中演示了另一种方法-
finished()
signal和
reply->readAll()