2012-11-26 46 views
6

我有一段在4.8工作代碼,但服務器現在我需要它移植到QT5(β2)
這是應該發生的事情:
我要發佈的一些數據到一個web服務器的url應該看起來像這樣「http://server/actions.php」 然後我的領域(「行動」字符串和「數據」字符串(json))應該發送到服務器使用後。在URL中不進行編碼現在QT5帳數據使用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()); 

,我可能不會在第一時間將這樣做的權利,(它的工作4.8),但真正的問題是,addEncodedQueryItem和addQueryItem現在因爲QT5走了,我不我不知道應該用什麼替換它們。
我已閱讀新的文檔,並看到新的QUrlQuery,但我無法弄清楚我自己如何使用這個在我的情況。

回答

3

我遇到類似的問題,使用的代碼類同於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); 

希望它可能是有用的重寫代碼中使用QT5

1

Qt5不再有QUrl::encodedQuery()方法。不確定,但從文檔可能使用QUrl::query()方法代替。

希望它有幫助。

0

QUrlQuery()幫助你編碼POST數據發送HTTP POST值。
PyQt 5.4中的示例:

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