Pergunta

eu sou novo Qt. Eu instalei o QT para VS2008 e integrado ao meu VS2010. Eu só quero saber como fazer solicitações HTTP. Eu li sobre QtNetwork Mas o QTHTTP é obsoleto.

Eu também sei sobre libcurl e Curlpp, mas tenho problemas para instalá -lo e fazê -lo funcionar com o QT.

O que você recomenda, QtNetwork ou Curlpp? Se QtNetwork, você pode me dar uma função de amostra ou pedaço de código (e qual classe usar). Se Curlpp (libcurl), você pode me apontar para algum lugar onde eu possa encontrar as etapas para instalá -las Qt (ou explicar gentilmente)?

Muito obrigado.

Foi útil?

Solução

libcurl e Curlpp são ótimas bibliotecas, mas usá -las adiciona uma dependência ao seu projeto que provavelmente você pode evitar.

Versões recentes do QT recomendam usar QNetworkAccessManager Para fazer solicitações de rede (solicitações HTTP incluídas) e receber respostas.

A maneira mais simples possível de baixar um arquivo é:

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

Quando o replyFinished Slot é chamado, o QNetworkReply Objeto que é necessário como parâmetro conterá os dados baixados, bem como os meta-dados (cabeçalhos, etc.).

Um exemplo mais completo pode ser encontrado nos exemplos do QT, você pode Leia aqui seu código -fonte.

Outras dicas

Giuseppe está certo, você não precisa usar libcurl, Curlpp e bibliotecas semelhantes. Não há necessidade disso, o QT tem uma classe de obra simples e própria.

Lembre -se de que a maneira padrão de enviar solicitação e recuperação de resposta é assíncrona. Você sempre precisa conectar o sinal do gerente (QNetWorkReply*) a um slot.

Se você enviar várias solicitações e não quiser adicionar um slot para cada resposta, sempre poderá executar um loop de eventos e conectar o sinal dos gerentes ao slot de loops de eventos ().

Algo assim:

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 falar nisso. Não sei o que você está fazendo. Mas se for um aplicativo móvel, eu recomendaria que você mude do VS para o QTCreator IDE. Possui um bom simulador e uma cadeia de ferramentas completa para testes de dispositivos móveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top