QT5 qDebug()&lt; <qbytearray empty =“”

时间:2015-07-07 03:40:25

标签: qt5

=“”

我尝试从网址获取HTML QNetworkAccessManager。 statusCode为200. debug reply->readAll()的数据长度为35988.但如果我使用qDebug()则打印为空。
我的环境windown7 x32 Chinese +qt5.5 x32(mingw)。我将此代码复制到linux(qt5.5 x64)。它在工作。

  

可以打印HTML内容,为什么?

请帮帮我。

我的代码是:

QEventLoop loop;
QTimer timer;
QNetworkRequest request;
request.setUrl(QUrl("http://mp.weixin.qq.com/s?__biz=MzA4MjAzMzg4NA==&mid=208317469&idx=4&sn=0928285db7c368e276e85519b3d0763b&3rd=MzA3MDU4NTYzMw==&scene=6#rd"));
request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36" );
request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8");
request.setRawHeader("Accept-Encoding", "none");
request.setRawHeader("Accept-Charset", "utf-8");
request.setRawHeader("Connection", "keep-alive");
request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
QNetworkReply *reply = manager->get(request);
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
timer.start(timeout);//超时10秒
loop.exec();
if(reply->error()){
    qDebug()<<"error";
}
QByteArray res= reply->readAll();
reply->close();
reply->deleteLater();
// QString str = QString::fromUtf8(res.data(), res.size());
qDebug()<<statusCode;
qDebug()<<res;

1 个答案:

答案 0 :(得分:1)

您应该连接到QNetworkReply的SIGNAL(finished()),并且只有在准备好后(即收到完成的信号时)才能执行所有这些操作:

if(reply->error()){
    qDebug()<<"error";
}
QByteArray res= reply->readAll();
reply->close();
reply->deleteLater();
// QString str = QString::fromUtf8(res.data(), res.size());
qDebug()<<statusCode;
qDebug()<<res;

可能你的问题是,在你调用readAll()时,并没有完整的响应字节到达。也许你可以通过插入调试器来检查这一点,也许你会有不同的时间,并会获得其他结果。