QHttp 在 Qt5 中不可用
Posted
技术标签:
【中文标题】QHttp 在 Qt5 中不可用【英文标题】:QHttp in not available in Qt5 【发布时间】:2014-10-03 13:54:46 【问题描述】:我注意到 QHttp
类在 Qt5 中不再可用,并且我不断收到一条错误消息,提示我需要使用 QNetworkAccessManager
来执行此操作。
有没有办法在 Qt5 中访问这个类?
【问题讨论】:
是的,您需要使用 QNetworkAccessManager(首选)或使用兼容性插件 QtHttp,它提供 Qt4 中的 QHttp 类。 谢谢,但我不明白“怎么做”。我只是一个学习者。 这取决于你想做什么。您需要尝试编写一些代码,然后提交代码才能在此处获得帮助。 好的,但如果我想使用兼容性插件 QtHttp,它提供 QHttp 类,就像它在 Qt4 中一样。它是像一个包含的头文件还是添加到 user.pro 文件中。 检查this 主题。它解释了如何安装兼容性插件。 【参考方案1】:在 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;
您也可以通过将QNetworkAccessManager
的finished
信号连接到插槽来以异步方式执行此操作:
connect(&manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinished(QNetworkReply*)));
并在那里读取数据:
void onFinished(QNetworkReply* reply)
if (reply->error() == QNetworkReply::NoError)
QByteArray bts = reply->readAll();
...
【讨论】:
【参考方案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;
【讨论】:
你也可以发布你的等待循环吗?【参考方案3】:假设您不需要维护庞大的代码库,正确的方法是改用新的QNetworkAccessManager 类。
【讨论】:
以上是关于QHttp 在 Qt5 中不可用的主要内容,如果未能解决你的问题,请参考以下文章
为啥“事件”在 Chrome 中全局可用,但在 FF 中不可用?