2012-07-19 6 views
16

Devo creare un servizio web semplice (che è il "server"). L'obiettivo è fornire alcuni dati che leggo in un'applicazione Qt/C++ come dati JSON. Fondamentalmente un'applicazione JavaScript nel browser deve leggere i suoi dati dall'app Qt. Di solito è uno scenario per singolo utente, quindi l'utente esegue un'applicazione Google Maps nel suo browser, mentre i dati aggiuntivi provengono dall'applicazione Qt.Creazione di WebService semplice in C++/Qt (funzione di server) che fornisce dati JSON

Finora ho trovato queste librerie:

  1. Qxt: http://libqxt.bitbucket.org/doc/0.6/index.html ma essendo un newbie su C++/Qt mi mancano alcuni esempi. Aggiunto: Ho trovato un esempio here
  2. gSOAP: http://www.cs.fsu.edu/~engelen/soap.html ha più esempi e documentazione e anche sembra sostenere JSON
  3. KD SOAP: http://www.kdab.com/kdab-products/kd-soap/ senza esempio, per quanto posso dire, docu è here
  4. caratteristiche Qt in sé, ma è più su che agisce come un client: http://qt-project.org/videos/watch/qt-networking-web-services

Controllo SO mi dà sostanzialmente collegamenti alle librerie di cui sopra

  1. webservice with Qt con un esempio che non capisco.
  2. How to Create a webservice by Qt

Quindi, in pratica io ho le seguenti domande :

  1. Quale lib useresti? Voglio mantenerlo il più semplice possibile e richiederebbe un esempio.
  2. Esiste un altro (facile!) Metodo per fornire i dati JSON alla pagina Web JavaScript oltre al WebService?

- Modifica, osservazioni: ---

deve essere applicazione intrinseca. Nessun server Web può essere installato, non è possibile utilizzare altri tempi di esecuzione. L'utente esegue semplicemente l'app. Forse il Qt WebKit potrebbe essere un approccio ....

- Modifica 2 -

Attualmente il controllo dei piccoli server web come di SO "Qt HTTP Server?"

+1

Perché non crearlo come un programma CGI chiamato da un server Web esistente? Probabilmente è molto più semplice. –

+0

Perché è fondamentalmente uno scenario desktop. I dati si trovano solo sul PC dell'utente e non è possibile installare un server Web sul PC di ciascun utente. La WebApp è utilizzata solo perché include Google Maps. –

+1

Hai considerato [Jetty] (http://jetty.codehaus.org/jetty/)? IIRC non richiede installazione e necessita solo di Java. –

risposta

14

A partire dal mio test, Attualmente sto utilizzando QtWebApp: http://stefanfrings.de/qtwebapp/index-en.html Questa è una delle risposte di Edit 2 (Qt HTTP Server?) piccola WebServer

di Stefan ha un codice ben documentato, è scritto in "Qt C++" e facile da usare, soprattutto se si hanno lavorato con servlet già. Dal momento che può essere facilmente integrato nel mio progetto Qt, finirò con un WebServer interno.

Alcuni codici demo dai miei test JSON, che dimostrano che la generazione del contenuto JSON sta praticamente creando un QString.

void WebServiceController::service(HttpRequest& request, HttpResponse& response) { 
// set some headers 
response.setHeader("Content-Type", "application/json; charset=ISO-8859-1"); 
response.setCookie(HttpCookie("wsTest","CreateDummyPerson",600)); 

QString dp = WebServiceController::getDummyPerson(); 
QByteArray ba = dp.toLocal8Bit(); 
const char *baChar = ba.data(); 
response.write(ba); 
} 

Se qualcuno ha semplici esempi con altre librerie da condividere, per favore fatemelo sapere.

+1

Esiste qualche evoluzione di questo progetto? –

+0

Grazie per il collegamento a http://stefanfrings.de/qtwebapp/index-en.html. Ho passato un po 'di tempo a leggere i documenti. Sembra buono. Dovrebbe essere su github – iep

2
QByteArray ba = dp.toLocal8Bit(); 
const char *baChar = ba.data(); 

Non è necessario convertire il QByteArray a char array. Response.write() può anche essere chiamato con QByteArray.

A proposito: qPrintable(dp) è una scorciatoia per convertire da QString in un array di caratteri.

Problemi correlati