Qt Jambi:访问QNetworkReply的内容

时间:2010-06-03 17:49:32

标签: qt qt-jambi qnetworkaccessmanager

我无法访问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();
    }

}

1 个答案:

答案 0 :(得分:3)

我认为QWebPage已经查询了所有QNetworkReply对象。文档说

  

QNetworkReply是一种顺序访问   QIODevice,表示一次数据   从对象中读取,不再是   由设备保存。因此   应用程序的责任   如果需要,请保留此数据。

所以重置它不会起作用。

请注意,如果您直接通过QNetworkAccessManager发出网络请求,则可以获得包含可用数据的QNetworkReply。您只能获得一个实际网址,而QWebPage方法会在此之后下载其他所有内容,即图片,js等。