qt jambi:访问qnetworkreply的内容
-
24-10-2019 - |
题
我在访问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等。
不隶属于 StackOverflow