Mein QHttp get () Aufruf funktioniert nicht unter Windows, sondern tut auf Linux

StackOverflow https://stackoverflow.com/questions/803088

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe ein Programm geschrieben, das QHttp verwendet, eine Webseite zu erhalten. Dies funktioniert unter Linux, funktioniert aber nicht auf meinem Windows-Rechner (Vista). Es scheint, dass das QHttp Erledigt-Signal nicht empfangen wird.

Der entsprechende Code ist:

    Window::Window()
{
    http = new QHttp(this);
    connect(http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
url = new QUrl("http://something.com/status.xml");
http->setHost(url->host(), url->port() != -1 ? url->port() : 80);
    if (!url->userName().isEmpty()) http->setUser(url->userName(), url->password());
}

void Window::retrievePage()
{ 
byteArray = new QByteArray;
result = new QBuffer(byteArray);
result->open(QIODevice::WriteOnly);

    httpRequestAborted = false;
    httpGetId = http->get(url->path(), result);
 }

 void Window::httpDone(bool error)
 {
     //Never gets here!
 }

Jede Hilfe wäre appriecated werden.

Matt

War es hilfreich?

Lösung

Das sollte nicht passieren, das heißt QHttp zuverlässig funktioniert sowohl unter Windows und Unix.

Mein Rat ist, zu prüfen, ob die Aufschläge richtige Antwort gibt. Dies kann beispielsweise erfolgen dass die Datenübertragung durch die Überprüfung in Ordnung ist. Sie können den Status von QHttp das Signal verfolgen, z.B. dataReadProgress , requestStarted , QNetworkAccessManager statt? Um Ihre Füße nass schnell, überprüft ein Beispiel, das ich vor einiger Zeit zu Qt Labs geschrieben: Bildbetrachter mit Remote-URL per Drag-and-Drop-Unterstützung . Es nutzt die genannten QNetworkAccessManager das Bild von der fallen gelassen URL zu greifen. Schauen Sie sich die source-code rel="nofollow, es ist nur 150 Zeilen.

Andere Tipps

Umgeschrieben von Ariya vorgeschlagen als QNetworkAccessManager und Blick auf dieses Beispiel zu verwenden,

Das funktioniert jetzt auch unter Windows und Linux.

Window::Window()
{
   connect(&manager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(retrieveData(QNetworkReply*)));
}

void Window::retrieveMessage()
{
    manager.get(QNetworkRequest(QUrl("http://...")));
}

void Window::retrieveData(QNetworkReply *reply)
{
    QVariant statusCodeV = 
    reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);

    // "200 OK" received?
    if (statusCodeV.toInt()==200)
    {
        QByteArray bytes = reply->readAll();  // bytes
    }

    reply->deleteLater();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top