QHttp недоступен в Qt5

Я заметил, что QHttp класс больше не доступен в Qt5, и я продолжаю получать сообщение об ошибке, в котором говорится, что мне нужно использовать QNetworkAccessManager сделать это.

Есть ли способ получить доступ к этому классу в Qt5?

5

Решение

Это простой HTTP-пост (я использую Qt 5.3.2)

int Connection::postRequest(QString requestType, QUrl params){
QString params_array = params.query();

QNetworkRequest request(user->url);
request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(params_array.size()));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

QEventLoop waitLoop;
QNetworkAccessManager* connection = new QNetworkAccessManager(/*`this` can also be passed*/);
QNetworkReply* reply = connection->post(request, params_array.toUtf8());
QObject::connect(reply, SIGNAL(finished()), &waitLoop, SLOT(quit()));
waitLoop.exec();

int errorCode = reply->error();
if (errorCode != 0){
// Show Error Message
}
else{
// Parse "reply"}

delete reply;
delete connection;
return errorCode;
}
4

Другие решения

использование QNetworkAccessManager в Qt 5. Вы можете использовать цикл обработки событий, чтобы дождаться окончания ответа и затем прочитать доступные байты:

QString My_class::My_Method()
{

QNetworkAccessManager manager;

QNetworkReply *reply = manager.get(QNetworkRequest(QUrl(myURL)));

QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
loop.exec();

QByteArray bts = reply->readAll();
QString str(bts);

delete reply;

return str;

}

Вы также можете сделать это асинхронным способом, подключив finished сигнал о QNetworkAccessManager в слот:

connect(&manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinished(QNetworkReply*)));

И читать данные там:

void onFinished(QNetworkReply* reply)
{

if (reply->error() == QNetworkReply::NoError)
{
QByteArray bts = reply->readAll();

...
}
}
5

Предполагая, что вам не нужно поддерживать огромную базу кода, правильный путь заключается в использовании новых QNetworkAccessManager класс вместо.

1
По вопросам рекламы [email protected]