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に対しては1つしかありませんが QWebPage
アプローチの後、その後すべてをダウンロードします。つまり、JSなど。
所属していません StackOverflow