Pregunta

He escrito un programa que usa qhttp para obtener una página web. Esto funciona bien en Linux, pero no funciona en mi caja de Windows (Vista). Parece que la señal qhttp done nunca se recibe.

El código relevante es:

    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!
 }

Cualquier ayuda sería solicitada.

Matt

¿Fue útil?

Solución

Esto no debería suceder en absoluto, es decir, QHttp funciona de manera confiable tanto en Windows como en Unix.

Mi consejo es que compruebe si el servicio da la respuesta adecuada. Esto se puede hacer, por ejemplo. mediante la verificación de que la transferencia de datos está bien. Puede rastrear el estado de la señal de QHttp, por ejemplo. dataReadProgress , requestStarted , requestFinished , y otras señales relacionadas.

Por otro lado, en lugar de usar QHttp antiguo, ¿por qué no usar el QNetworkAccessManager en cambio? Para humedecerse los pies rápidamente, revise un ejemplo que publiqué en Qt Labs hace algún tiempo: visor de imágenes con soporte remoto para arrastrar y soltar URL . Utiliza el dicho QNetworkAccessManager para capturar la imagen de la URL eliminada. Consulte el código fuente , es sólo 150 líneas.

Otros consejos

Reescrito de acuerdo con lo sugerido por Ariya para usar QNetworkAccessManager y mirando

scroll top