1

QNetworkAccessManager を使用して QWebView から応答データを読み取ろうとしています。

ここにある返信の指示に従いました: QtWebKitで応答を取得する方法

QNetworkAccessManager をサブクラス化し、my クラスを使用するように 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;
}

私はまだ空のデータを取得します。私は何を間違っていますか?

4

1 に答える 1

2

QNetworkAccessManager と QNetworkReply はすべて非同期 IO クラスであり、ノンブロッキング IO とも呼ばれます。したがって、すぐに読むと、ほぼ間違いなく空になります。

必要なことは、QNetworkReply の readyread() シグナルを接続することです。これは、データの準備が整った後に発行されます。詳細については、ドキュメントを参照してください

編集:ああ、もう1つ、リンクした質問が答えたように、readAll()の代わりにpeek()を使用してください。これは、QWebViewがデータを読み取った後にデータを受信しないためです(QIODevicesは、1回の読み取り後にすべてのシステムリソースをパージします)

于 2012-07-13T18:36:56.100 に答える