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

}
有帮助吗?

解决方案

我想 QWebPage 已经查询了所有 QNetworkReply 它们进来的对象。文档说

Qnetworkreply是一个顺序访问QIODEVICE,这意味着一旦从对象读取数据,设备就不再保留。因此,如果需要,则保留这些数据是该应用程序的责任。

因此,重置它行不通。

请注意,如果您直接通过 QNetworkAccessManager 你确实得到了 QNetworkReply 有可用的数据。您只在实际的URL中得到一个 QWebPage 方法之后下载所有其他内容IE Images,JS等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top