QNetworkReply warten, fertig
Ich bin mit Qt 4.6.3 und die folgenden nicht-funktionierenden code
QStringList userInfo;
QNetworkRequest netRequest(QUrl("http://api.stackoverflow.com/1.1/users/587532"));
QNetworkReply *netReply = netman->get(netRequest);
//from here onwards not working
netReply->waitForReadyRead(-1);
if (netReply->isFinished()==true)
{userInfo << do sth to reply;}
return userInfo;
als diese Funktion gibt eine leere QStringList, die app stürzt ab. Wie zu warten, bis die Anfrage beendet ist und dann die Antwort innerhalb einer Funktion
InformationsquelleAutor yolo | 2011-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie event-Schleife:
Außerdem sollten Sie überlegen, einige kürzer, dann Netzwerk-Zeitüberschreitung (der 20er?). Ich bin mir nicht sicher, ob Sie fertig ist aufgerufen, auch wenn ein Fehler aufgetreten ist. So ist es möglich, dass Sie eine Verbindung zu error signal auch.
havent come across jeder situation, wo die fertigen slot wasent genannt. ich weiß, dass der doc erklärt, dass es normalerweise aufgerufen wird, aber für mich ist es immer aufgerufen wird
Es bedeutet nur, Sie sollten überlegen, einige zusätzliche Signale. Es spielt keine Rolle, ob es "immer heißt für mich". Kann es sein, situation (die docs sagen), wenn Sie nicht bekommen finished () - signal, so dass Ihre event-Schleife stecken
InformationsquelleAutor Kamil Klimek
Erste empfehle ich Ihnen, Lesen Sie die entsprechende Dokumentation aus der Qt-Dokumentation Verweisen, die Sie hier finden können: http://doc.qt.nokia.com/latest/classes.html.
Blick auf dein code-Beispiel scheint es, dass Sie bereits haben, an der Seite mit
QNetworkRequest
undQNetworkReply
eineQNetworkAccessManager
. Was Sie brauchen, ist zu verbinden Sie einen slot, um diefinished(QNetworkReply *)
signal. Dieses signal wird ausgegeben, wenn eine angemeldete Netzwerk-Antwort abgeschlossen ist.Nun, in Ihrem slot, Lesen Sie die Daten, die gesendet wurde, in Antwort auf Ihre Anfrage. So etwas wie:
EDIT:
Warten synchron für ein signal verwenden QEventLoop. Sie haben ein Beispiel hier
http://wiki.forum.nokia.com/index.php/How_to_wait_synchronously_for_a_Signal_in_Qt
InformationsquelleAutor bruno