Qt Jambi: Accesso al contenuto di QNetworkReply
-
24-10-2019 - |
Domanda
Sto avendo problemi ad accedere il contenuto degli oggetti QNetworkReply. appare contenuto da vuoto o nullo. Secondo la documentazione (traduzione da C ++ a Java) Penso di aver ottenuto questo impostato correttamente, ma senza alcun risultato. Inoltre è stato segnalato un "Errore sconosciuto".
Tutte le idee molto apprezzato. Codice:
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();
}
}
Soluzione
immagino che il QWebPage
ha già interrogato tutti gli oggetti QNetworkReply
come sono venuti. I documenti dicono
QNetworkReply è un accesso sequenziale QIODevice, il che significa che una volta che i dati viene letto dall'oggetto, non è più tenuto dal dispositivo. È quindi la responsabilità dell'applicazione per conservare questi dati, se è necessario.
quindi il ripristino non è andare a lavorare.
Si noti che se si effettua la richiesta di rete direttamente attraverso QNetworkAccessManager
si vuole ricevere un QNetworkReply
con i dati disponibili. Si ottiene solo uno però per l'URL reale mentre il QWebPage
approccio download tutto il resto, dopo che cioè immagini, js, ecc