ответ

6

Итак, мы ясно знаем, что в QNetworkAccessManager нет метода с именем «patch» Поэтому я использовал «sendCustomRequest», но с QBuffer. Поскольку QNetworkManager требует объект QIODevice.

QString destination=""; 
currentNode.replace(QString("/").append(latestNode),""); 
destination 
     .append(host) 
     .append(currentNode) 
     .append(".json"); 
QString jsonString=QString(QString("{").append("\"").append(latestNode).append("\"").append(":").append("\"").append(str).append("\"").append(QString("}"))); 
QNetworkRequest request(destination); 
request.setHeader(QNetworkRequest::ContentTypeHeader, 
    "application/x-www-form-urlencoded"); 
qDebug()<<jsonString; 
QBuffer *buffer=new QBuffer(); 
buffer->open((QBuffer::ReadWrite)); 
buffer->write(jsonString.toUtf8()); 
buffer->seek(0); 
manager->sendCustomRequest(request,"PATCH",buffer); 
qDebug()<<"posted"; 
+1

Помимо: с помощью оператора '+' вместо всех этих 'append's приводит к более четкой и поддерживаемому коду. – owacoder

+0

Обратите внимание, что 'QBuffer' должен быть создан как указатель (как правильно сделал Aykut), а не в стеке, иначе это может быть сбор мусора до того, как запрос успеет выполнить, что очень затрудняет отладки. –

0

попробовать:

QNetworkAccessManager* manager = new QNetworkAccessManager(); 
QNetworkRequest request("http://<domain>/<path>/"); 
QHttpMultiPart* multipart = new QHttpMultiPart(); 
//... Add your data in multipart 
manager->sendCustomRequest(request, "PATCH", multipart);