我刚在使用
QNetworkReply
Qt documentation
对于
QIODevice::readAll()
(其中
从继承此方法)。
以下是文件说明:
来自设备,以及
以字节形式返回
大堆
.
此功能无法报告错误;返回
空的
QByteArray的意思可以是
没有数据
当前可用于
阅读
或
那是一个
发生错误
假设我有以下联系:
connect(this->reply, &QIODevice::readyRead, this, &MyApp::readyReadRequest);
Ths公司
readyReadRequest()
插槽如下所示:
void MyApp::readyReadRequest()
{
LOG(INFO) << "Received data from \"" << this->url.toString() << "\"";
LOG(INFO) << "Data contents:\n" << QString(this->reply->readAll());
this->bufferReply = this->reply->readAll();
}
在我打电话给你后,我感到惊讶
this->bufferReply
QByteArray
的类成员
MyApp
). 我把它传给了一个
QXmlStreamReader
并且做到了:
while (!reader.atEnd())
{
LOG(DEBUG) << "Reading next XML element";
reader.readNext();
LOG(DEBUG) << reader.tokenString();
}
if (reader.hasError())
{
LOG(ERROR) << "Encountered error while parsing XML data:" << reader.errorString();
}
想象一下,当我得到以下输出时,我会感到惊讶:
2017-10-17 16:12:18591调试[默认值][作废MyApp::processReply()][…]读取下一个XML元素
2017-10-17 16:12:18591调试[默认值][作废MyApp::processReply()][…]无效的
2017-10-17 16:12:18591错误[默认值]在解析XML数据时遇到错误:文档过早结束
通过调试,我得到了我的
bufferReply
此时为空。我再次查看了文档,但在阅读完之后,没有找到任何提示从设备中删除数据的内容(在我的例子中是网络回复)。
删除打印字节数组的行,或只是将其移到后面
this->bufferReply = this->reply->readAll();
然后打印班级成员修复问题的内容:
void MyApp::readyReadRequest()
{
LOG(INFO) << "Received data from \"" << this->url.toString() << "\"";
this->bufferReply = this->reply->readAll();
LOG(INFO) << "Data contents:\n" << QString(this->bufferReply);
}
然而,我想知道我是否做错了什么,或者文档是否确实不完整。
自从
readAll()
不报告错误或数据在给定的时间点不可用返回空字节数组是唯一提示某些内容未按预期工作的事实。