QT从QWebView的QNetworkAccessManager读取数据



我正在尝试使用QNetworkAccessManager从QWebView读取响应数据。

我遵循了此处找到的回复中的提示:如何在QtWebKit中获得响应

我子类化了QNetworkAccessManager,然后将QWebView设置为使用my类:

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;
}

我仍然得到空数据。我做错了什么?

QNetworkAccessManager 和 QNetworkReply 都是异步 IO 类,也就是非阻塞 IO,这意味着 createRequest() 将立即返回,而无需等待 QNetworkReply 完成获取/创建请求。因此,如果您立即阅读它,几乎可以肯定它可能是空的。

你需要做的是连接QNetworkReply的readyread()信号,该信号将在数据准备就绪后发出。有关更多详细信息,请阅读文档

编辑:哦,还有一件事,正如您链接的问题所回答的那样,请使用peek()而不是readAll(),因为您的QWebView在读取数据后不会收到数据(QIODevices在一次读取后清除所有系统资源)

最新更新