我正在开发一个 MainWindow 应用程序来学习 C++ 和 Qt(C++ 和 QT 4.8)。我想在我的应用程序的不同对象中执行 HTTP 请求,例如对话框/向导和 MainWindow。我知道我基本上应该每个应用程序有一个 QNetworkAccessManager。我的问题是,在课堂之间传递这个 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));
}