2012-11-26 96 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))