Ho un'applicazione MainWindow su cui sto lavorando per imparare C++ e Qt (C++ e QT 4.8). Voglio fare richieste HTTP in diversi oggetti della mia applicazione, come Dialoghi/Wizard e nella Finestra Principale. So che fondamentalmente dovrei avere un QNetworkAccessManager per applicazione. La mia domanda è, qual è il modo corretto per passare questo QNAM tra le classi?Come utilizzare QNetworkAccessManager in classi diverse? Condivisione generale di dati importanti tra le classi?
Al momento ho come un puntatore passo al costruttore della mia procedura guidata, ma questo sembra ... poco elegante e poco flessibile. Qual è il modo corretto di dare i miei dialoghi o qualsiasi altra classe che decido di fare, accedere al mio QNetworkAccessManager? Immagino di avere la stessa domanda su qualsiasi pezzo di dati a cui devo dare accesso.
Qual è la soluzione progettata correttamente in C++? Il modello singleton sembra un'opzione, ma una cattiva come capisco. Ho un po 'di codice qui per mostrare la mia domanda.
mio MainWindow costruttore e slot di cui lanciare la mia procedura guidata:
MyMainWindow::MyMainWindow
{
qnam = new QNetworkAccessManager();
}
...
MyMainWindow::wizardStarter
{
mywizard = MyWizard(vari, qnam, this);
}
mio guidata Constructor in cui sto facendo richieste di rete e analisi dei dati dopo aver ottenuto i dati da parte dell'utente, e quindi in cui ho bisogno di un QNetworkAccessManager :
MyWizard::MyWizard(SomeOtherArgument *vari, QNetworkAccessManager *qnam, QObject *parent)
{
...
this->ourQnam = qnam;
...
}
MyWizard::launchRequest(QUrl newUrl)
{
ourQnam->get(QNetworkRequest(newUrl));
}
vi consiglio design pattern Singleton. Perché pensi che questo modello sia cattivo? – hamed
@hamed, i singleton nascondono le relazioni di dipendenza tra le classi se non si utilizza un'iniezione di dipendenza appropriata. Nulla di sbagliato con il modello di progettazione singleton basta utilizzare l'iniezione corretta per comunicare che la classe dipende dal singleton. – Matthew
Come aggiungere una iniezione appropriata nel caso di un singleton? – MJBoa