简体   繁体   English

Qttt中没有QHttp

[英]QHttp in not available in Qt5

I noticed that the QHttp class is no longer available in Qt5 and I keep getting an error message which says that I need to use the QNetworkAccessManager to do this. 我注意到Qt5中的QHttp类不再可用,并且我不断收到一条错误消息,说我需要使用QNetworkAccessManager来执行此操作。

Is there a way to access this class in Qt5? 有没有办法在Qt5中访问这个类?

Use QNetworkAccessManager in Qt 5. You can use an event loop to wait until the reply is finished and then read the available bytes : 在Qt 5中使用QNetworkAccessManager 。您可以使用事件循环等待答复完成,然后读取可用字节:

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;

}

You can also do it in an asynchronous way by connecting the finished signal of the QNetworkAccessManager to a slot : 您也可以通过将QNetworkAccessManagerfinished信号连接到插槽以异步方式执行此操作:

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

And read data there : 并在那里读取数据:

void onFinished(QNetworkReply* reply)
{

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

       ...
   }
}

This is a simple HTTP post (I am using Qt 5.3.2) 这是一个简单的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;
}

假设您不需要维护庞大的代码库,正确的方法是使用新的QNetworkAccessManager类。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM