下面是一个使用 lambda 函数发送 HTTP 请求的示例代码:
#include <QCoreApplication>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建网络请求管理器
QNetworkAccessManager manager;
// 创建 HTTP 请求
QUrl url("https://www.google.com/");
QNetworkRequest request(url);
// 发送 HTTP 请求,并使用 lambda 函数处理响应
QObject::connect(&manager, &QNetworkAccessManager::finished, [&a](QNetworkReply *reply) {
// 判断是否出错
if (reply->error() != QNetworkReply::NoError) {
qDebug() << "Error: " << reply->errorString();
return;
}
// 读取响应数据
QByteArray data = reply->readAll();
qDebug() << data;
// 关闭应用程序
a.exit(0);
});
manager.get(request);
return a.exec();
}
在这个示例中,我们首先创建了一个 QNetworkAccessManager
对象来管理网络请求。然后,我们创建了一个 QNetworkRequest
对象,并指定要访问的 URL。接着,我们通过 QObject::connect()
函数将 QNetworkAccessManager::finished
信号连接到一个 lambda 函数上,以便处理 HTTP 响应。
在 lambda 函数中,我们首先检查响应是否有错误。如果没有错误,我们就读取响应数据并输出它。最后,我们调用 QCoreApplication::exit()
函数来关闭应用程序。
需要注意的是,在 lambda 函数中,我们使用了 QCoreApplication
对象 a
。这是因为在默认情况下,lambda 函数的作用域不能包含任何外部变量。但是,我们需要在 lambda 函数内部调用 QCoreApplication::exit()
函数,以便关闭应用程序。为了解决这个问题,我们将 QCoreApplication
对象传递给 lambda 函数,并将其引用为参数 &a
。这样,我们就可以在 lambda 函数内部访问 QCoreApplication
对象,并调用其中的函数。