2012-11-26 13 views
6

Ich habe ein Stück Code, das in 4.8 gearbeitet, aber jetzt brauche ich die Portierung auf QT5 (Beta2)
Dies ist, was passiert:
Ich möchte einige Daten hinterlassen zu einem Webserver sollte die URL wie folgt aussehen: "http: //server/actions.php" Dann sollten meine Felder (ein "Action" -String und ein "Data" String (JSON)) per Post an den Server geschickt werden. Nicht in der URL codierteQT5 Buchungsdaten an den Server mit 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()); 

Nun, ich könnte dieses Recht nicht in erster Linie tun, (Es funktionierte in 4.8), aber das eigentliche Problem ist, dass addEncodedQueryItem und addQueryItem sind jetzt seit QT5 gegangen, und ich don‘ Ich weiß, wofür ich sie ersetzen soll.
Ich habe die neuen Dokumente gelesen und sehe die neue QUrlQuery, aber ich konnte nicht selbst herausfinden, wie ich das in meinem Fall benutze.

Antwort

3

ich konfrontierte ähnliches Problem und verwendeten Code ähnlich den folgend 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); 

es Hoffnung könnte nützlich sein, den Code neu zu schreiben http Post Werten QT5

1

Qt5 hat nicht mehr die QUrl::encodedQuery() Methode. Nicht sicher, aber aus der Dokumentation könnte es funktionieren mit QUrl::query() Methode stattdessen.

Ich hoffe, es hilft.

0

QUrlQuery() helfen Sie kodieren POST-Daten senden .
Beispiel in PyQt 5.4:

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