单例模式来管理QNetworkAccessManager对象的创建和销,举一个完整的例子,包括调用
时间: 2024-04-07 10:29:15 浏览: 42
qt 单例模式,模板
5星 · 资源好评率100%
下面是一个完整的使用单例模式来管理QNetworkAccessManager对象的例子:
```cpp
// Singleton.h
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
QNetworkAccessManager* getNetworkAccessManager() {
if (!m_networkAccessManager) {
m_networkAccessManager = new QNetworkAccessManager(this);
}
return m_networkAccessManager;
}
private:
Singleton() {}
QNetworkAccessManager* m_networkAccessManager = nullptr;
};
// main.cpp
#include "Singleton.h"
#include <QCoreApplication>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QNetworkAccessManager* networkAccessManager = Singleton::getInstance().getNetworkAccessManager();
QNetworkRequest request(QUrl("https://www.baidu.com"));
QNetworkReply* reply = networkAccessManager->get(request);
QObject::connect(reply, &QNetworkReply::finished, [=]() {
qDebug() << reply->readAll();
reply->deleteLater();
a.quit();
});
return a.exec();
}
```
上面的代码中,首先在main.cpp中调用Singleton::getInstance().getNetworkAccessManager()方法获取QNetworkAccessManager对象。然后通过QNetworkAccessManager对象来发起一个HTTP GET请求,获取百度首页的内容。请求完成后,调用QNetworkReply的finished信号槽来获取响应内容并输出到控制台,然后调用QCoreApplication的quit()方法退出程序。
需要注意的是,这里使用了Lambda表达式来捕获了QCoreApplication对象a,从而在请求完成后通过a.quit()方法来退出程序。通过使用单例模式来管理QNetworkAccessManager对象的创建和销毁,避免了重复创建对象造成资源浪费和内存泄漏的问题,同时也提高了代码的可维护性和可扩展性。
阅读全文