【发布时间】:2010-06-03 17:49:32
【问题描述】:
我无法访问 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();
}
}
【问题讨论】:
-
只是想知道为什么你需要网页,而你可以只使用 QNetworkAccessManager 做同样的事情?
-
@Anton:我使用网页有两个原因:1)它为我提供了页面所需的所有资产(css、js、图像 - 包括 css 中的那些)和 2)因为我需要渲染的html。
-
您是如何在不重新下载的情况下访问图像数据的?
-
@richard - 我没有。我再次下载它们。在Qt jambi中,所有的方法都是final的,所以不能覆盖QNetworkReply或者QNetworkAccessManager中的相关方法。很烦人。没有重新编译 Qt Jambi(这显然不是微不足道的),我已经没有想法了。
-
很烦人。我正在使用 PyQt,所以应该有更多的运气
标签: qt qt-jambi qnetworkaccessmanager