Pregunta

soy nuevo en Qt . He instalado Qt para VS2008 e integrado con mi VS2010 . Sólo quiero saber cómo hacer peticiones HTTP. He leído acerca de QtNetwork , pero QtHttp es obsoleto.

También sabe acerca de libcurl y curlpp , pero tengo problemas con la instalación, y lo que es trabajar con Qt.

¿Qué recomiendas, QtNetwork o curlpp ? Si QtNetwork , puede usted por favor dame una función de ejemplo o una pieza de código (y qué clase que se utiliza). Si curlpp (libcurl) , puede usted por favor me punto a algún lugar donde puedo encontrar los pasos para instalarlo para Qt (o la amabilidad de explicar)?

Muchas gracias.

¿Fue útil?

Solución

libcurl y curlpp son grandes bibliotecas, pero su uso se agrega una dependencia a su proyecto que, probablemente, se puede evitar.

Las versiones recientes de Qt recomienda usar QNetworkAccessManager para hacer solicitudes de red ( incluidas las peticiones HTTP) y recibir respuestas.

La forma más sencilla posible descargar un archivo es:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));

Cuando la ranura replyFinished se llama, el href="http://doc.qt.nokia.com/4.7/qnetworkreply.html" rel="nofollow noreferrer"> QNetworkReply objeto

Un ejemplo más completo se puede encontrar en los ejemplos de Qt, puede leer aquí su código fuente .

Otros consejos

Giuseppe es correcto, no es necesario el uso de libcurl , curlpp y bibliotecas similares. No hay necesidad de eso, Qt tiene una clase simple y trabajar en él posee.

Tenga en cuenta que la manera estándar de enviar la solicitud y la recuperación de la respuesta es asíncrona. Siempre hay que conectar la señal de acabado (QNetworkReply *) gerente de una ranura.

Si envía múltiples peticiones y no desea añadir una ranura para cada respuesta, siempre se puede ejecutar un bucle de eventos, y conectar la señal de los administradores a los bucles de eventos quit () ranura.

Algo como esto:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QEventLoop *eventLoop = new QEventLoop();
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), eventLoop, SLOT(quit());

manager->get(QNetworkRequest(QUrl("http://stackoverflow.com")));
eventLoop->exec(QEventLoop::ExcludeUserInputEvents);

QByteArray replyData = reply->readAll();
... //do what you want with the data your receive from reply

Por cierto. no sabe lo que está haciendo. Pero si es una aplicación móvil, le recomiendo que cambia de VS a QtCreator IDE. Tiene un simulador agradable y un conjunto de herramientas completo para pruebas de dispositivos móviles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top