Seite 1 von 1

Qthttp Request

Verfasst: 4. März 2006 18:56
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

Verfasst: 4. März 2006 20:17
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;
}

Verfasst: 5. März 2006 11:28
von c++coder
hm, ist das wirklich ein bug, denn auf der qt homepage hab ich keinen qthttp bug gefunden...

cu

Verfasst: 6. März 2006 00:38
von Esleborn
also das erste könnte der setHost sein...

Verfasst: 6. März 2006 09:35
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

Verfasst: 7. März 2006 01:02
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.