QT Jambi: Acceder al contenido de QNETWorkRyly
-
24-10-2019 - |
Pregunta
Tengo problemas para acceder al contenido de los objetos QNETWorkRently. El contenido parece estar vacío o cero. Según los documentos (que traduce de C ++ a Java), creo que tengo esto configurado correctamente, pero fue en vano. Además, se está informando un "error desconocido".
Cualquier idea muy apreciada. Código:
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();
}
}
Solución
Imagino que el QWebPage
ya ha consultado todo el QNetworkReply
objetos como entraban. Los documentos dicen
QNETWorkReply es un QioDeVice de acceso secuencial, lo que significa que una vez que los datos se leen del objeto, ya no los mantiene el dispositivo. Por lo tanto, es responsabilidad de la aplicación mantener estos datos si es necesario.
Por lo tanto, restablecer no va a funcionar.
Tenga en cuenta que si realiza la solicitud de red directamente a través de QNetworkAccessManager
Obtienes un QNetworkReply
con datos disponibles. Sin embargo, solo obtienes uno para la URL real, mientras que el QWebPage
Enfoque descarga todo lo demás después de eso, es decir, js, etc.