Qthttp Request

Alles rund um die Programmierung mit Qt
Antworten
c++coder
Beiträge: 47
Registriert: 11. Juli 2005 00:20
Kontaktdaten:

Qthttp Request

Beitrag von c++coder »

hi,
hab ein kleines beispiel gemacht, wenn ein button gedrückt wird so schick ich einen get request ab:

Code: Alles auswählen

void Qt_Sample::on_btnTEST_clicked()
{
	http->setHost("www.c-plusplus.de", 80);
	http->get("/forum/index.php"); 
}

void Qt_Sample::httpRequestFinished(int requestId, bool error)
{
	QByteArray data;
	data = http->readAll();
	QMessageBox::information(this, "Request", data);
}

insgesamt bekomme ich 3 messageboxen, warum 3? die erste und letzte sind dabei leer!

wenn ich die dritte messagebox zumache, dann die zweite bekomme ich folgendes:

Debug Error!
....
Module: 4.1.1
File: global\qglobal.cpp
Line: 1916

Assert: "!IsEmpty()" in file c:\iwmake\build_vs2005_commercial______________padding____________\include\qtcore\../../src/corelob/tools/qlist.h, line 222

jemand ne ahnung was da los ist?

edit:
hab jetzt mitdabei:

httpGetId = http->get("/forum/index.php");


wenn ich diese id im httpRequestFinished abfrage dann bekomme ich trotzdem noch die zweite u dritte = leere messagebox mit diesem error;((

cu
madRenEGadE
Beiträge: 52
Registriert: 10. Februar 2006 15:15

Beitrag von madRenEGadE »

das problem hab ich auch und ich hab rausgefunden das requestFinished
bereits nach der erstellung, dann wenn der request wirklich abgeschlossen ist und dann noch mal gesendet wird aber frag mich nicht warum....

ich hab das so gelöst das ich in dem slot der mit requestFinished verbunden ist folgendes mache:

Code: Alles auswählen

// irgendwo vorher bool variable = false;

if(variable == fales)
{// damit wird das erste mal abgefangen
variable = true;
}
else
{// hier muss alles rein was ausgeführt werden soll
variable = false;
}
c++coder
Beiträge: 47
Registriert: 11. Juli 2005 00:20
Kontaktdaten:

Beitrag von c++coder »

hm, ist das wirklich ein bug, denn auf der qt homepage hab ich keinen qthttp bug gefunden...

cu
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

also das erste könnte der setHost sein...
Glaube an eine Lösung, nur dann kannst du auch eine finden.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Esleborn hat geschrieben:also das erste könnte der setHost sein...
Und der zweite *ist* die fehlende Überprüfung auf requestID ...
http://doc.trolltech.com/4.1/qhttp.html#get
http://doc.trolltech.com/4.1/qhttp.html#requestFinished
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
c++coder
Beiträge: 47
Registriert: 11. Juli 2005 00:20
Kontaktdaten:

Beitrag von c++coder »

was ist mit setHost???

die id frage ich ja wohl ab, wie oben auch gesagt!!

Code: Alles auswählen

Qt_Sample::Qt_Sample(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
	httpGetId = 0;
	ui.setupUi(this);
	http = new QHttp(this);

	connect(http, SIGNAL(requestFinished(int, bool)),
            this, SLOT(httpRequestFinished(int, bool)));
}

Qt_Sample::~Qt_Sample()
{
	delete http;
}

void Qt_Sample::on_btnTEST_clicked()
{
	http->setHost("www.c-plusplus.de", 80);
	httpGetId = http->get("/forum/index.php"); 
}

void Qt_Sample::httpRequestFinished(int requestId, bool error)
{
	if (requestId == httpGetId && !error){
		QByteArray data;
		data = http->readAll();
		QMessageBox::information(this, "Request", data);
	}
}

mit diesem code hier bekomme ich 2 messageboxen:
messagebox 1 ist mit dem request vom server, 2 messagebox ist dann leer....drück ich ok -> exception...

Code: Alles auswählen

void QHttpPrivate::finishedWithSuccess()
{
    Q_Q(QHttp);
    if (pending.isEmpty())
        return;
    QHttpRequest *r = pending.first();

    emit q->requestFinished(r->id, false);
    pending.removeFirst();
    delete r;                       <--------- Unhandled exception at 0x640151c0 (QtNetworkd4.dll) in Qt_Sample.exe: 0xC0000005: Access violation reading location 0xfeeefeee.

Antworten