Как использовать QNetworkAccessManager в разных классах? Общий обмен важными данными между классами?

У меня есть приложение MainWindow, над которым я работаю, чтобы изучить C++ и Qt (C++ и QT 4.8 ). Я хочу делать HTTP-запросы в разных объектах моего приложения, таких как Dialogs/Wizard и в MainWindow. Я знаю, что в основном должен иметь один QNetworkAccessManager для каждого приложения. Мой вопрос: как правильно передать этот QNAM между классами?

На данный момент у меня есть это как указатель, который я передаю конструктору моего мастера, но это кажется... неэлегантным и негибким. Каков правильный способ предоставить моим диалогам или любым другим классам, которые я решу создать, доступ к моему одному QNetworkAccessManager? Думаю, у меня тот же вопрос о любой части данных, к которым мне нужно предоставить доступ ко всему.

Какое здесь правильно разработанное решение C++ -? Паттерн singleton кажется вариантом, но плохим, как я понимаю. У меня есть немного кода, чтобы показать мой вопрос.

Мой конструктор MainWindow и слот, который запускает мой мастер:

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

...

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

My Wizard Constructor, в котором я делаю сетевые запросы и анализирую данные после получения данных от пользователя, и, следовательно, в котором мне нужен QNetworkAccessManager:

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

MyWizard::launchRequest(QUrl newUrl)
{
    ourQnam->get(QNetworkRequest(newUrl));
}
6
задан MJBoa 3 July 2012 в 15:01
поделиться