`QNetworkAccessManager` 是 Qt 网络模块中的一个核心类,它负责处理所有的网络请求,如 HTTP 请求、FTP 下载、上传文件等。使用 `QNetworkAccessManager` 可以方便地进行网络访问操作。以下是一个基本的使用示例:
```cpp
// 首先,包含必要的头文件
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>
// 假设我们有一个QObject派生的类MyClass,在其中管理网络请求
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = nullptr) :
manager(new QNetworkAccessManager(this)),
m_url(QStringLiteral("http://example.com"))
{
// 当网络请求完成时,触发replyFinished槽函数
connect(manager, &QNetworkAccessManager::finished,
this, &MyClass::replyFinished);
}
public slots:
void sendRequest() {
// 创建一个QNetworkRequest实例,指定要访问的URL
QNetworkRequest request(m_url);
// 发送GET请求
QNetworkReply *reply = manager->get(request);
// 可以保存回复对象,以便在槽函数中处理结果
}
private slots:
void replyFinished(QNetworkReply *reply) {
// 处理网络请求的完成事件
if (reply->error()) {
qDebug() << "Error occurred:" << reply->errorString();
} else {
// 获取服务器返回的数据
QByteArray data = reply->readAll();
// 在此处处理data,例如显示在界面上或存储到文件
qDebug() << "Server replied with:" << data;
}
// 记得在处理完数据后删除reply,防止内存泄漏(在Qt 5.10及以上版本不需要手动删除)
reply->deleteLater();
}
private:
QNetworkAccessManager *manager;
QUrl m_url;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyClass myClass;
myClass.sendRequest();
return app.exec();
}
```
在这个示例中:
- 首先创建了一个 `QNetworkAccessManager` 实例。
- 设置了一个连接,当网络请求完成时会调用 `replyFinished` 槽函数。
- `sendRequest` 函数用来发起 GET 请求到指定 URL。
- `replyFinished` 槽函数会在网络请求完成后被调用,处理收到的数据或错误信息。
除了 GET 请求之外,还可以使用 `QNetworkAccessManager` 的其他方法,如 `post()` 发送 POST 请求,或 `put()`、`upload()` 等方法进行文件上传等复杂操作。