Seite 1 von 1
QHttp datei herrunter laden
Verfasst: 29. September 2009 18:51
von Irods
Hi wie schon im Titel steht versuche ich gerade ein Programm
zu schreiben, das eine Datei downloadet und dazu QHttp verwenden soll.
Mein Problem ist das das irgendwie gar nicht klappt.
Es wird zwar weder während der Kompilierung noch bei der Ausführung ein Fehler angezeigt aber die Funktion funktioniert nicht.
Hier mal der code:
Code: Alles auswählen
void downloadFile()
{
QUrl url("http://www.google.de/index.html");
QHttp http;
http.setHost(url.host(), 80);
http.get(url.path());
QString set = http.readAll();
edit->setHtml(set);
}
edit ist ein halt ein QTextedit Feld.
Bitte um Hilfe kriege das irgendwie gar nicht auf die Reihe.
MfG Irods und schon ma thx
Verfasst: 29. September 2009 19:05
von FaS
Doku zu QHttp hat geschrieben:The class works asynchronously, so there are no blocking functions. If an operation cannot be executed immediately, the function will still return straight away and the operation will be scheduled for later execution. The results of scheduled operations are reported via signals. This approach depends on the event loop being in operation.
Alles klar? Außerdem empfielt die Doku QNetworkAccessManager.
Verfasst: 29. September 2009 20:07
von Irods
das hat mir jetzt leider noch nicht so geholfen

Verfasst: 29. September 2009 21:23
von -=Freaky=-
da steht, dass der entspr. aufruf nicht blockiert.
d.h. wenn die daten geladen sind, gibts ein signal.
vorher kannst du nichts lesen oder anzeigen ...
mfg,
julian
Verfasst: 30. September 2009 06:32
von Christian81
und das heißt auch das nach dem Verlassen von downloadFile() QHttp weg ist.
Des weiteren ist QHttp deprecated.
Verfasst: 30. September 2009 11:02
von Irods
Hi hab jetzt auch mal http ausgelagert aber leider funktionert es immer noch nicht:
Code: Alles auswählen
void HpC::downloadFile()
{
QUrl url("http://www.google.de/index.html");
http = new QHttp;
QFile file("raus.html");
file.open(QIODevice::WriteOnly);
http->setHost(url.host(), 80);
http->get(url.path());
http->get(url.path(), &file);
connect( http, SIGNAL(done(bool)), this, SLOT(showFile(bool)) );
if (http->error())
QMessageBox::information(this, "HttpFehler", http->errorString(), QMessageBox::Ok);
}
void HpC::showFile( bool a)
{
if(a)
{
QFile file2("raus.html");
file2.open(QIODevice::ReadOnly);
QTextStream ds(&file2);
QString set = ds.readAll();
file2.close();
edit->setHtml(set);
}
}
Jetzt gibt er wenn ich es ausführe die Meldung >Segmentation fault<
aus und schmiert ab.
Ich weiss zwar das das so viel heisst wie halt
unberechtigter/nicht möglicher Zugriff aber ich hab trotzdem noch keine Ahnung was ich machen soll.
MfG Irods
Verfasst: 30. September 2009 11:09
von Christian81
Und was denkst Du wie lange QFile lebt?
Verfasst: 30. September 2009 12:14
von pfid
Verfasst: 30. September 2009 17:07
von Irods
also QFile file lebt so lange bis ichs manuell loesche

Verfasst: 30. September 2009 20:16
von -=Freaky=-
Irods hat geschrieben:also QFile file lebt so lange bis ichs manuell loesche

beim austritt aus dem gueltigkeitsbereich (bspw. der funktion) wird die variable geloescht (file) ...
mfg,
julian
Verfasst: 30. September 2009 20:53
von Kratzy974
Code: Alles auswählen
void HpC::downloadFile()
{
QUrl url("http://www.google.de/index.html");
http = new QHttp;
QFile file("raus.html");
QFile wird auf dem Stack in dem Scope (die {} Klammern) erstellt. Der Stack wird beim verlassen des Scopes wieder aufgeräumt, somit alle Objekte, welche auf dem Stack innerhalb des Scopes erzeugt werden wieder gelöscht.
QHttp braucht das QFile aber länger als nur in dieser Methode, da Asynchron.
QFile file ist eine Instance (Klassen !). Die Datei raus.html besteht natürlich länger, das ist für QHttp aber egal.
Verfasst: 30. September 2009 21:39
von Irods
mm hab das file ausgelagert funzt aber trozdem nich

Verfasst: 30. September 2009 22:39
von Kratzy974
Wird in die html Datei denn etwas hineingeschrieben ? Es kann vielleicht sein, dass die Datei noch zum Schreiben offen ist (file noch offen ?). funktioniert file2.open() oder gibt dies false zurück ?
Verfasst: 30. September 2009 22:40
von -=Freaky=-
wie genau ausgelagert?
mfg,
julian
Verfasst: 1. Oktober 2009 12:16
von Irods
hi hab QFile für die Klasse public definiert und die datei ist nach jedem
aufruf dieser zum schreiben leer(beim lesen nicht).