Domanda

Sono nuovo di Qt . Ho installato Qt per VS2008 e integrato con il mio VS2010 . Voglio solo sapere come fare le richieste HTTP. Ho letto su QtNetwork , ma QtHttp è obsoleto.

so anche su libcurl e curlpp , ma ho problemi con l'installazione, e rendendo il lavoro con Qt.

Che cosa mi consiglia, QtNetwork o curlpp ? Se QtNetwork , potete per favore darmi una funzione di esempio o un pezzo di codice (e quale classe di utilizzo). Se curlpp (libcurl) , potete per favore mi punto da qualche parte dove posso trovare le istruzioni per installare per Qt (o gentilmente spiegare)?

La ringrazio molto.

È stato utile?

Soluzione

libcurl e curlpp sono grandi librerie, ma il loro utilizzo aggiunge una dipendenza al progetto che, probabilmente, si può evitare.

Le versioni recenti di Qt consiglia di utilizzare QNetworkAccessManager per effettuare richieste di rete ( incluse le richieste http) e ricevere le risposte.

Il modo più semplice possibile scaricare un file è:

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

Quando la fessura replyFinished viene chiamato, il href="http://doc.qt.nokia.com/4.7/qnetworkreply.html" rel="nofollow noreferrer"> QNetworkReply oggetto

Un esempio più completo può essere trovato negli esempi Qt, è possibile leggere qui il suo codice sorgente .

Altri suggerimenti

Giuseppe è giusto, non è necessario l'uso di libcurl , curlpp e librerie simili. Non c'è bisogno per questo, Qt ha una semplice e classe operaia a se stante.

Ricordate che il modo standard di invio di richiesta e il recupero di risposta è asincrona. Devi sempre collegare il finito del segnale (QNetworkReply *) direttore di uno slot.

Se si inviano più richieste e non si desidera aggiungere uno slot per ogni risposta, è sempre possibile eseguire un ciclo di eventi, e collegare segnalano i gestori alle reti evento Quit () slot.

Qualcosa di simile a questo:

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

Btw. non sai cosa stai facendo. Ma se un app mobile, vi consiglio di passare da VS per QtCreator IDE. Ha un simulatore piacevole e una toolchain completa per il test dispositivo mobile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top