Qt5 отправка данных на сервер с помощью QUrl / QNetworkRequest


У меня есть фрагмент кода, который работал в 4.8, но теперь мне нужно перенести его в Qt5 (beta2)
Вот что должно произойти:
Я хочу отправить некоторые данные на веб-сервер, url должен выглядеть следующим образом "http://server/actions.РНР" Затем мои поля ("Action" - string и" data " string (json)) должны быть отправлены на сервер с помощью post. Не закодировано в url

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 8

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);

Надеюсь, что будет полезно переписать код для отправки значений http post с помощью Qt5

Qt5 больше не имеет метода QUrl::encodedQuery(). Не уверен, но из документации он может работать с использованием метода QUrl::query() вместо этого.

Надеюсь, это поможет.

QUrlQuery() помогает вам кодировать почтовые данные.
Пример в PyQt 5.4:

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