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 :D

Verfasst: 30. September 2009 20:16
von -=Freaky=-
Irods hat geschrieben:also QFile file lebt so lange bis ichs manuell loesche :D
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).