QHttp在Qt5中不可用
QHttp in not available in Qt5
我注意到QHttp
类在Qt5中不再可用,我一直收到一条错误消息,说我需要使用QNetworkAccessManager
来完成此操作。
有没有办法在Qt5中访问这个类?
在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();
...
}
}
这是一个简单的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类。
相关文章:
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 控制台输出在 Qt5 中未正确显示
- 在Qt5中使用QTextSteam时的"使用已删除功能"
- Qt5 从 MySQL 数据库中选择数据
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- Qt5 用户界面编译器:-i 选项不可用
- Qt5 throws std::bad_alloc
- 如何避免在 cmake 中自动链接 Qt5 库?
- 动态更改 qt5 选项卡名称
- 可能的Qt5错误:调用setFixedSize()禁用主窗口的关闭按钮(在Win7下)
- QT5 信号不会激活插槽内的功能
- 如何在使用 Qt5 构造函数时将非常量参数修改为常量参数?
- 如何在 Qt5 中执行多个 QProcess
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- 使用 Qt5 SQL 进行异步数据库访问的策略
- Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 UI 对象
- 如何使用新语法QT5将信号连接到信号?
- QHttp在Qt5中不可用