2012-06-21 4 views
1

Я пытаюсь прочитать данные ответа из QWebView с помощью QNetworkAccessManager.QT Чтение данных из QNetworkAccessManager QWebView

Я последовал 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 - это все асинхронные классы ввода-вывода, A.K.A неблокирующие IO, что означает, что createRequest() будет немедленно возвращаться, не дожидаясь завершения QNetworkReply запроса на получение/создание. Поэтому, если вы сразу прочитаете это, почти определенная вероятность, что он будет пустым.

Что вам нужно сделать, это подключить сигнал Readyread() QNetworkReply, который будет испускаться после того, как ваши данные будут готовы. Для получения более подробной информации читайте the docs

Edit: О, и еще одна вещь, а the question you linked ответил, используем заглядывать() вместо ReadAll(), так как ваш QWebView не будет получать данные после того, как вы его прочитали (QIODevices очистить все системные ресурсы после один прочитанный)

Смежные вопросы