2012-06-21 33 views
1

我想从QWebView中使用QNetworkAccessManager读取响应数据。QT从QWebView的QNetworkAccessManager读取数据

我跟着答复instrunction这里找到: how to get response in QtWebKit

我子类的QNetworkAccessManager,然后设置QWebView使用我的课:

ui->explorer->page()->setNetworkAccessManager(new myNetworkAccessManager()); 

然后我重写的createRequest功能,并尝试读取数据:

#include "mynetworkaccessmanager.h" 
myNetworkAccessManager::myNetworkAccessManager(QObject *parent) : 
    QNetworkAccessManager(parent) 
{ 
} 
QNetworkReply *myNetworkAccessManager::createRequest (Operation op, const QNetworkRequest & req, QIODevice * outgoingData){ 
    QNetworkReply *reply = QNetworkAccessManager::createRequest(op, req, outgoingData); 
    qDebug() << reply->readAll(); 
    return reply; 
} 

我仍然收到空的数据。 我在做什么错?

回答

2

QNetworkAccessManager和QNetworkReply都是异步IO类A.K.A非阻塞IO,这意味着createRequest()将立即返回,而不会等待QNetworkReply完成获取/创建请求。所以如果你立即阅读,几乎肯定有可能是空的。

你需要做的就是连接QNetworkReply的readyread()信号,这个信号在你的数据准备就绪后发出。欲了解更多详情阅读the docs

编辑:哦,还有一两件事,为the question you linked回答,请用PEEK(),而不是readAll(),因为你读它(QIODevices后清除所有的系统资源后,您的QWebView将无法接收数据一读)

相关问题