1

QNetworkReplyオブジェクトのコンテンツにアクセスできません。コンテンツが空またはゼロのようです。ドキュメント(c ++からjavaへの変換)によると、これは正しく設定されていると思いますが、役に立ちません。さらに、「不明なエラー」が報告されています。

どんなアイデアでも大歓迎です。コード:

public class Test extends QObject {

    private QWebPage page;

    public Test() {

        page = new QWebPage();

        QNetworkAccessManager nac = new QNetworkAccessManager();
        nac.finished.connect(this, "requestFinished(QNetworkReply)");

        page.setNetworkAccessManager(nac);

        page.loadProgress.connect(this, "loadProgress(int)");
        page.loadFinished.connect(this, "loadFinished()");

    }

    public void requestFinished(QNetworkReply reply) {

        reply.reset();
        reply.open(OpenModeFlag.ReadOnly);

        reply.readyRead.connect(this, "ready()");  // never gets called

        System.out.println("bytes: " + reply.url().toString());  // writes out asset uri no problem
        System.out.println("bytes: " + reply.bytesToWrite());  // 0
        System.out.println("At end: " + reply.atEnd());   // true
        System.out.println("Error: " + reply.errorString());   // "Unknown error"
    }

    public void loadProgress(int progress) {
        System.out.println("Loaded " + progress + "%");
    }

    public void loadFinished() {
        System.out.println("Done");
    }

    public void ready() {
        System.out.println("Ready");
    }

    public void open(String url) {
        page.mainFrame().load(new QUrl(url));
    }

    public static void main(String[] args) {

        QApplication.initialize(new String[] { });

        Test t = new Test();
        t.open("http://news.bbc.co.uk");

        QApplication.exec();
    }

}
4

1 に答える 1

3

QWebPage入ってきたオブジェクトはすでにすべてクエリされていると思いQNetworkReplyます。ドキュメントには次のように書かれています。

QNetworkReplyはシーケンシャルアクセスQIODeviceです。つまり、データがオブジェクトから読み取られると、デバイスによって保持されなくなります。したがって、必要に応じてこのデータを保持するのはアプリケーションの責任です。

したがって、リセットしても機能しません。

を介して直接ネットワークリクエストを行うと、利用可能なデータをQNetworkAccessManager取得することに注意してください。QNetworkReplyただし、実際のURLに対しては1つしか取得できませんが、このQWebPageアプローチでは、その後に他のすべて、つまり画像、jsなどがダウンロードされます。

于 2010-06-03T18:40:28.313 に答える