Question

Je vais avoir des difficultés à accéder au contenu des objets QNetworkReply. Contenu semble être vide ou nul. Selon les docs (traduction de c ++ java) Je pense que j'ai cet ensemble correctement, mais en vain. En outre est fait état d'une « erreur inconnue ».

Toutes les idées appréciées. Code:

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

}
Était-ce utile?

La solution

J'imagine que le QWebPage a déjà interrogé tous les objets QNetworkReply comme ils sont venus. Les docs disent

QNetworkReply est un accès séquentiel QIODevice, ce qui signifie qu'une fois que les données est lu à partir de l'objet, il ne maintenu par le dispositif. Il est donc la responsabilité de l'application conserver ces données si elle a besoin.

remise à zéro il ne va pas au travail.

Notez que si vous faites la demande de réseau directement par QNetworkAccessManager vous obtenez un QNetworkReply avec les données disponibles. Vous obtenez seulement un bien pour l'URL alors que l'approche QWebPage téléchargements tout le reste après que dire des images, js, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top