gpt4 book ai didi

c++ - 如何在不同的类中使用 QNetworkAccessManager?类之间重要数据的一般共享?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:28 24 4
gpt4 key购买 nike

我有一个 MainWindow 应用程序,我正在致力于学习 C++ 和 Qt(C++ 和 QT 4.8)。我想在我的应用程序的不同对象中执行 HTTP 请求,例如 Dialogs/Wizard 和 MainWindow。我知道我基本上应该为每个应用程序配备一个 QNetworkAccessManager。我的问题是,在类(class)之间传递这个 QNAM 的正确方法是什么?

目前我将它作为指针传递给我的向导的构造函数,但这似乎...不优雅且不灵活。让我的对话框或我决定创建的任何其他类访问我的一个 QNetworkAccessManager 的正确方法是什么?我想我对需要授予所有访问权限的任何数据都有同样的问题。

此处正确的 C++ 设计解决方案是什么?单例模式似乎是一种选择,但据我所知是一种糟糕的选择。我这里有一些代码来展示我的问题。

我的 MainWindow 构造函数和启动我的向导的插槽:

MyMainWindow::MyMainWindow
{
qnam = new QNetworkAccessManager();
}

...

MyMainWindow::wizardStarter
{
mywizard = MyWizard(vari, qnam, this);
}

我的向导构造函数,我在其中发出网络请求并在从用户那里获取数据后解析数据,因此我需要一个 QNetworkAccessManager:

MyWizard::MyWizard(SomeOtherArgument *vari, QNetworkAccessManager *qnam, QObject *parent)
{
...
this->ourQnam = qnam;
...
}

MyWizard::launchRequest(QUrl newUrl)
{
ourQnam->get(QNetworkRequest(newUrl));
}

最佳答案

从您的问题来看,我认为您实际上是在问要使用哪种形式的依赖注入(inject)(即将依赖的 QNetworkAccessManager 注入(inject)对象)。

在您的情况下,您使用的是构造函数注入(inject)。这是一种广为人知和接受的注入(inject)形式。它强烈表明您的向导类依赖于 QNetworkAccessManager,它使您的代码易于人们理解。如果您使用单例从向导类实现内部简单地获取静态 QNetworkAccessManager,虽然它具有删除构造函数注入(inject)的好处,但它隐藏了您的向导类使用 QNetworkAccessManager。

另一种众所周知的注入(inject)形式是 Setter 注入(inject)setDelegate( delegate )

从专业角度来说,您当前的方法没有任何问题,因为它再次清楚地传达了您的向导类依赖于 QNetworkAccessManager 对象。

如果您有兴趣了解有关依赖注入(inject)的更多信息,请阅读这里的一些资料。

Dependency Injection

Dependency Injection in C++

关于c++ - 如何在不同的类中使用 QNetworkAccessManager?类之间重要数据的一般共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com