私はC++とQt(C++とQT 4.8)を学ぶために取り組んでいるMainWindowアプリケーションを持っています。 私のアプリケーションの異なるオブジェクト(ダイアログ/ウィザードやMainWindowなど)でHTTPリクエストを行いたいです。私は基本的にアプリケーションごとに1つのQNetworkAccessManagerを持つことになっていることを知っています。私の質問は、クラス間でこのQNAMを渡す適切な方法は何ですか?QNetworkAccessManagerをさまざまなクラスで使用する方法は?クラス間の重要なデータの一般的な共有?
私はそれをポインタとして持っていますが、私はウィザードのコンストラクタに渡しますが、これは控えめで柔軟性がないようです。 QNetworkAccessManagerにアクセスするために、私のダイアログや他のクラスを与える適切な方法は何ですか?私はすべてのアクセスを与えるために必要なデータについて、同じ質問をしていると思います。
適切にC++で設計されたソリューションはここにありますか?シングルトンのパターンはオプションのようですが、私が理解するように悪いものです。私は私の質問を示すためにここに少しのコードがあります。
MyMainWindow::MyMainWindow
{
qnam = new QNetworkAccessManager();
}
...
MyMainWindow::wizardStarter
{
mywizard = MyWizard(vari, qnam, this);
}
マイウィザードコンストラクタいる私はネットワーク要求を作ってるんだし、ユーザからデータを取得した後、データを解析し、そのためここで私が必要QNetworkAccessManager:私のウィザードを起動
私のメインウィンドウコンストラクタとスロット:、私はあなたが本当に(つまり、あなたのdepenを注入依存性注入のどの形を求めているあなたの質問から
MyWizard::MyWizard(SomeOtherArgument *vari, QNetworkAccessManager *qnam, QObject *parent)
{
...
this->ourQnam = qnam;
...
}
MyWizard::launchRequest(QUrl newUrl)
{
ourQnam->get(QNetworkRequest(newUrl));
}
私はシングルトンデザインパターンをお勧めします。なぜあなたはこのパターンが悪いと思いますか? – hamed
@hamed、シングルトンは、適切な依存関係注入を使用しない場合、クラス間の依存関係を非表示にします。シングルトンのデザインパターンに間違いはありません。あなたのクラスがシングルトンに依存していることを伝えるために、適切な注入を使用してください。 – Matthew
シングルトンの場合は、どのようにして適切な注入を追加しますか? – MJBoa