2012-11-26 10 views
6

Ho un pezzo di codice che ha lavorato in 4.8, ma ora ho bisogno di portarlo a QT5 (beta2)
Questo è quello che dovrebbe accadere:
Voglio inviare alcuni dati a un server web l'url dovrebbe apparire come questo "http: //server/actions.php" Quindi i miei campi (una stringa "Action" e una stringa "data" (json)) devono essere inviati al server tramite post. Non codificata in URLdati QT5 postando server utilizzando qurl/QNetworkRequest

QUrl params; 
// The data to post 
QVariantMap map; 

map["Title"]="The title"; 
map["ProjectId"]="0"; 
map["Parent"]="0"; 
map["Location"]="North pole"; 
map["Creator"]="You"; 
map["Group"]="a group"; 
QByteArray data = Json::serialize(map); //the map is converted to json im a QByteArray 

params.addEncodedQueryItem("Data",data); 
params.addQueryItem("Action", "Update"); 

QNetworkRequest Request(QUrl("http://server.com/actions.php")); 
Request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 
NetManager->post(Request,params.encodedQuery()); 

Ora, non potrebbe fare questo diritto, in primo luogo, (Ha funzionato in 4.8), ma il vero problema è che addEncodedQueryItem e addQueryItem sono ormai passati da quando QT5 e io don' so cosa dovrei sostituirli con.
Ho letto i nuovi documenti e ho visto il nuovo QUrlQuery ma non sono riuscito a capire da solo come usarlo nel mio caso.

risposta

3

ho affrontato problemi simili e utilizzati il ​​codice simile al seguente in QT5

QUrl url; 
QByteArray postData; 

url.setUrl("http://myurl...."); 
QNetworkRequest request(url); 
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded"); 

Qstring postKey = 'city'; 
QString postValue = 'Brisbane'; 

postData.append(postKey).append("=").append(postValue).append("&");   
networkManager.post(request,postData); 

spero che potrebbe essere utile per riscrivere il codice per inviare i valori HTTP POST utilizzando QT5

1

Qt5 non ha più il metodo QUrl::encodedQuery(). Non sono sicuro, ma dalla documentazione potrebbe funzionare con il metodo QUrl::query().

Spero che aiuti.

0

QUrlQuery() aiuta a codificare i dati POST .
Esempio in PyQt 5.4:

params = QtCore.QUrlQuery() 
params.addQueryItem("username", "Вагиф Plaît") 
reply = QtNetwork.QNetworkAccessManager().post(request, params.toString(QtCore.QUrl().FullyEncoded))