私は約6ヶ月前にGTKMMアプリケーションを開始しました。それはすべてが機能し、実際に毎日使用しています。基本的に、別のアプリケーションからデータファイルを読み込んでグラフを生成し、データを簡単にソートして表示できるデータベースアプリケーションです。私はそれが好きです。GTKmmアプリケーションのコードを整理する
しかし、私は自分のコードが混乱していると思うし、今日別の機能を実装しようと思ったときに、おそらくどこかに間違った方向転換をしたことに気づいた。
私のメインウィンドウGUIはグレイドファイルで定義されており、GUI(Gtk :: DrawingAreaに基づいたカスタムウィジェットである私のプロットウィジェット以外)はすべて1つのファイルになっています。ウィジェットとツリーストアへのポインタは、すべてコンストラクタでセットアップされ、デストラクタで削除されます。
GUI全体が異なるウィンドウに分割されたメインウィンドウであるため、すべてを1つのファイルに収めるのが理にかなっています。また、別のペインは他のペインと「通信」する必要があります。
メンテナンス可能なようにコードを整理するにはどうすればよいですか?私は本質的にウィジェットのコレクションである新しいクラスを作成し、そのメインウィンドウにスーパーウィジェットを配置しますか(各ウィンドウはスーパーウィジェットです)?
GTKMMのチュートリアルは、一般的には非常に最小限ですので、私はそこで多くの洞察を得ることができませんでした。
わかりました。さて、フレームがお互いに話す必要があるのはどうですか?たとえば、SomeGUIComponentAのボタンを押して、SomeGUIComponentBのラベルをリフレッシュする必要がありますか?ボタンとラベルの両方が私の巨大なGUIクラスに入っているので、それは簡単ですが、各フレームは1フレームおきにポイントを持つ必要がありますか? –
@baubieこの場合、私たちはパブリックメソッドをコンポーネントBに公開し、プライベートラベルとComponentAの呼び出しを更新します。SomeGUIComponentB.getInstance()。updateLabel(valueToUpdateWith); – Mark
ありがとうございます。私は質問を掲示して以来、これについて多くの読書をしてきました。あなたの答えは確かに有効ですので、私はそのようにマークしました。欠点は、シングルトンがグローバル変数と同じ理由で非常に落胆しているように見えることだけです。代わりに、私は、親ウィンドウへのポインタを各コンポーネントに渡し、親を通してコンポーネントを呼び出すかもしれないと思います。 –