Qttt中没有QHttp

Neo*_*kon 5 c++ qt qnetworkaccessmanager qt5 qhttp

我注意到QHttpQt5中不再提供该类,我不断收到一条错误消息,说我需要使用它QNetworkAccessManager来执行此操作.

有没有办法在Qt5中访问这个类?

Nej*_*jat 6

使用QNetworkAccessManagerQt中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;

}
Run Code Online (Sandbox Code Playgroud)

您也可以通过连接到插槽的finished信号以异步方式执行此操作QNetworkAccessManager:

connect(&manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinished(QNetworkReply*)));
Run Code Online (Sandbox Code Playgroud)

并在那里读取数据:

void onFinished(QNetworkReply* reply)
{

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

       ...
   }
}
Run Code Online (Sandbox Code Playgroud)


Bur*_*Dor 4

这是一个简单的 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;
}
Run Code Online (Sandbox Code Playgroud)